OpenCV-去噪效果和评估指标方法

实验前言

噪音类型

opencv常见噪音类型有

  1. 高斯噪音:高斯噪音是一种随机噪音,其数值服从正态分布。图像受到高斯噪音的影响时,像素值的变化类似于白噪音,但是噪音的强度会随像素值的变化而变化。

  2. 椒盐噪音:椒盐噪音是指在图像中随机出现黑点和白点,其强度和数量不确定。这种噪音通常是由图像损坏或传输过程中的数据错误引起的。

  3. 毛刺噪音:毛刺噪音是在图像中出现的一些明显的、非细节部分的异常像素,通常由于图像缺失或电磁干扰等原因造成。

  4. 泊松噪音:泊松噪音通常是在低亮度条件下拍摄时出现的。这种噪音的产生是由于图像的弱信号在成像过程中受到波动,导致像素值的随机变化。

  5. 光斑噪音:光斑噪音是在相机成像时出现的一些类似黑点的噪音,通常是由图像传感器中照明部分的坏点或粒子杂质造成的。

去噪方法

  1. 均值滤波(Mean Filter):将像素值替换为周围像素的平均值。适用于轻度噪音去除,但会模糊图像细节。

  2. 中值滤波(Median Filter):将像素值替换为周围像素值的中值。适用于去除椒盐噪音和毛刺噪音,并保留边缘信息。

  3. 高斯滤波(Gaussian Filter):使用高斯核对图像进行滤波,模糊图像并去除高斯噪音。

  4. 双边滤波(Bilateral Filter):结合空域和灰度信息,可以有效地去除噪音,并保持边缘的清晰度。

  5. 非局部均值滤波(Non-local Means Denoising):通过基于相似性的像素块来估计每个像素的值,适用于去除多种噪音。

  6. K近邻平均滤波(K-nearest Neighborhood Averaging Filter):通过计算K个最相似像素的平均值来去噪,适用于去除椒盐噪音。

  7. 快速傅里叶变换(Fast Fourier Transform, FFT):通过将图像转换到频域进行滤波,可以有效去除周期性噪音。

除了上述方法外,OpenCV 还支持其他一些高级的去噪算法,如小波变换去噪(Wavelet Denoising)、总变差去噪(Total Variation Denoising)等。这些算法都有不同的适用场景和去噪效果,根据具体的需求和噪音类型,选择合适的方法能获得更好的去噪效果。

实验设计

选取二张彩色图像,对其中的每一张彩色图像进行灰度化再分别加入高斯噪音、椒盐噪音共二种噪音,改变噪音的参数查看效果。

去噪处理时用到高斯滤波、双边滤波、均值滤波和中值滤波共4种滤波和去噪方法。对高斯噪音使用高斯滤波、双边滤波和中值滤波进行去噪;对椒盐噪音使用K近邻平均滤波、均值滤波进行去噪;

一共5组实验,对于每组实验的去噪效果使用2种评估方法:峰值信噪比(Peak Signal-to-Noise Ratio, PSNR)、 结构相似性指标(英文:structural similarity index measure,SSIM)进行评估。

评估方法

PSNR

简介

Peak signal-to-noise ratio(简称PSNR)是一个工程术语,表示信号的最大可能功率与影响信号表示精度的干扰噪声功率之间的比值。由于许多信号都有非常宽的动态范围,峰值讯噪比常用对数分贝单位来表示。

定义

它常简单地通过均方误差(MSE)进行定义。两个 m × n m×nm×n 单色图像 I II 和 K KK , I II 为一无噪声的原始图像,K KK 为 I II 的噪声近似(例: I II 为未压缩的原始图像,K KK为 I II 经过压缩后的图像),那么它们的的均方误差定义为:

在这里插入图片描述

则PSNR可定义为(针对灰度图):

在这里插入图片描述

其中MAXI为图像的最大像素值,PSNR的单位为dB。若每个像素由8位二进制表示,则其值为2^8-1=255

更为通用的表示是,如果每个采样点用 B 位线性脉冲编码调制表示,那么MAXI 就是

在这里插入图片描述

对于每点有RGB三个值的彩色图像来说,峰值信噪比的定义类似。除了横轴、纵轴 m mm 和 n nn 以外,还要考虑它的颜色组成RGB。我们需要分别对每个颜色处理其MSE,因为有3个颜色通道,所以MSE需再除以3。

彩色图像的峰值讯噪比定义为:
在这里插入图片描述

意义

  • PSNR接近 50dB ,代表压缩后的图像仅有些许非常小的误差。

  • PSNR大于 30dB ,人眼很难查觉压缩后和原始影像的差异。

  • PSNR介于 20dB 到 30dB 之间,人眼就可以察觉出图像的差异。

  • PSNR介于 10dB 到 20dB 之间,人眼还是可以用肉眼看出这个图像原始的结构,且直观上会判断两张图像不存在很大的差异。

  • PSNR低于 10dB,人类很难用肉眼去判断两个图像是否为相同,一个图像是否为另一个图像的压缩结果。

实现

我们可以调用第三方库skimage实现,里面有封装好的计算PSNR的代码,具体调用方式如下:

from skimage.metrics import peak_signal_noise_ratio as psnr
from PIL import Image
import numpy as npimg1 = np.array(Image.open('original.jpg'))
img2 = np.array(Image.open('compress.jpg'))if __name__ == "__main__":print(psnr(img1, img2))

SSIM(结构相似性)

简介

结构相似性指标(英文:structural similarity index measure,简称SSIM)是一种用以衡量两张数位影像相似程度的指标。当两张影像其中一张为无失真影像,另一张为失真后的影像,二者的结构相似性可以看成是失真影像的影像品质衡量指标。相较于传统所使用的影像品质衡量指标,像是峰值信噪比(英语:PSNR),结构相似性在影像品质的衡量上更能符合人眼对影像品质的判断。

定义

给定两个信号 x {\displaystyle \mathbf {x} }x 和 y {\displaystyle \mathbf {y} }y,两者的结构相似性定义为:
在这里插入图片描述

其中l(x,y)比较x和y的亮度,c(x,y)比较x和y的对比度,s(x,y)比较x和y的结构,α>0,β>0,γ>0,为调整l(x,y),c(x,y),s(x,y)相对重要性的参数,μx及μy,σx及σy分别为x和y的平均值和标准差,σxy为x和y的协方差,C1,C2,C3皆为常数,用以维持l(x,y)、c(x,y)、s(x,y)的稳定。

结构相似性指标的值越大,代表两个信号的相似性越高。

使用
实际使用时,简化起见,一般会将参数设为α = β = γ = 1 及C3=C2/2,得到:

在这里插入图片描述

在计算两张影像的结构相似性指标时,会开一个局部性的视窗,一般为N × N N×NN×N的小区块,计算出视窗内信号的结构相似性指标,每次以像素为单位移动视窗,直到整张影像每个位置的局部结构相似性指标都计算完毕。将全部的局部结构相似性指标平均起来即为两张影像的结构相似性指标。

实现

我们可以调用第三方库skimage实现,里面有封装好的计算ssim的代码,具体调用方式如下:

from skimage.metrics import structural_similarity as ssim
from PIL import Image
import numpy as npimg1 = np.array(Image.open('original.jpg'))
img2 = np.array(Image.open('compress.jpg'))if __name__ == "__main__":# If the input is a multichannel (color) image, set multichannel=True.print(ssim(img1, img2, multichannel=True))
备注:skimage的大名叫scikit-image,安装请用pip install scikit-image。

实验

高斯噪音

一.高斯噪声不同参数对于图像的影响

调参代码
# 彩色图像添加高斯噪音
noise = np.random.normal(0, 50, color_img.shape)
noise_img = color_img + noise.astype('uint8')# 灰度化图像添加高斯噪音
noise = np.random.normal(0, 50, gray_img.shape)
img_noise = gray_img + noise.astype('uint8')

通过对应的loc和sacle,代码中分别的0,50的值进行调节,来进行噪声的添加

(0,50)的图像

在这里插入图片描述

(0,10)的图像

在这里插入图片描述

(5,10)的图像

在这里插入图片描述

结果分析
  1. loc参数:

    • loc参数表示高斯噪声的均值,即噪声分布的中心。
    • 增加loc参数的值会导致噪声分布整体偏移。如果设置较大的loc值,则图片中的像素值会整体增加。相反,如果设置较小的loc值,则图片中的像素值会整体减小。
    • 较大的loc值会导致图像明亮度的增加,而较小的loc值则会导致图像明亮度的降低。
  2. scale参数:

    • scale参数表示高斯噪声的标准差,即噪声分布的扩散程度。
    • 增加scale参数的值会导致噪声分布更加宽广,即噪声的振幅变大,使得像素值的变动更加明显。
    • 较大的scale值会导致图像中的噪声更加明显,使图像看起来更加模糊和粗糙。相反,较小的scale值则会产生更细微、不易察觉的噪声。

需要注意的是,适当选择合适的loc和scale参数对于产生逼真的高斯噪声既重要又具有挑战。理想情况下,参数选择应该与图像的特性和实际需要相匹配。在实际应用中,通过实验和观察来调整和优化loc和scale参数,以达到满足噪声处理的需求并保持图像质量的最佳结果。

二.高斯噪音使用高斯滤波去噪实验

代码
#高斯噪音使用高斯滤波去噪实验
import cv2
import numpy as np
import matplotlib.pyplot as plt
from skimage.metrics import structural_similarity as ssim
#读取图像
# 读取彩色图像
color_img = cv2.imread('image.jpg')#图像替换image2.jpg# 读取灰度图像
gray_img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)#添加噪音
# 彩色图像添加高斯噪音
noise = np.random.normal(0, 50, color_img.shape)
noise_img = color_img + noise.astype('uint8')# 灰度化图像添加高斯噪音
noise = np.random.normal(0, 50, gray_img.shape)
img_noise = gray_img + noise.astype('uint8')#进行去噪处理
# 彩色图像进行高斯滤波去噪处理
denoised_img = cv2.GaussianBlur(noise_img, (5,5), 0)# 灰度化图像进行高斯滤波去噪处理
img_denoised = cv2.GaussianBlur(img_noise, (5,5), 0)#显示结果
# 彩色图像显示结果
plt.subplot(231)
plt.imshow(cv2.cvtColor(color_img, cv2.COLOR_BGR2RGB))
plt.title('Original color_img')plt.subplot(232)
plt.imshow(cv2.cvtColor(noise_img, cv2.COLOR_BGR2RGB))
plt.title('Noisy color_img')plt.subplot(233)
plt.imshow(cv2.cvtColor(denoised_img , cv2.COLOR_BGR2RGB))
plt.title('Denoised color_img')
# 灰度化图像显示结果
plt.subplot(234)
plt.imshow(gray_img, cmap='gray')
plt.title('Original gray_img')plt.subplot(235)
plt.imshow(img_noise, cmap='gray')
plt.title('Noisy gray_img')plt.subplot(236)
plt.imshow(img_denoised, cmap='gray')
plt.title('Denoised gray_img')plt.show()#评估结果
print("评估结果:")
print("彩色图像评估结果:")
# 计算均方误差
mse = np.mean((color_img - denoised_img )**2)# 计算差分图像
diff_image = denoised_img .astype(np.float64) - color_img.astype(np.float64)# 计算均方根误差
mse = np.mean(np.square(diff_image))
rmse = np.sqrt(mse)# 计算峰值信噪比
mse = np.mean((color_img - denoised_img )**2)
psnr = 20 * np.log10(255 / np.sqrt(mse))
print('峰值信噪比 PSNR:', psnr)
print('结构相似性 SSIM',ssim(color_img, denoised_img, channel_axis=2))print("灰度化图像评估结果:")
# 计算均方误差
mse = np.mean((gray_img - img_denoised)**2)# 计算差分图像
diff_image = img_denoised.astype(np.float64) - gray_img.astype(np.float64)# 计算均方根误差
mse = np.mean(np.square(diff_image))
rmse = np.sqrt(mse)# 计算峰值信噪比
mse = np.mean((gray_img - img_denoised)**2)
psnr = 20 * np.log10(255 / np.sqrt(mse))
print('峰值信噪比 PSNR:', psnr)
print('结构相似性 SSIM:',ssim(gray_img, img_denoised, channel_axis=1))
效果展示1

在这里插入图片描述

在这里插入图片描述

效果展示2

在这里插入图片描述

在这里插入图片描述

功能说明

对彩色图像以及其的灰度图添加高斯噪音,并分别使用高斯滤波去噪,输出原图像和添加噪音的图像以及去噪后的图像,最后计算SSIM和PSNR对彩色图像和灰度图像的去噪效果进行评估,并输出相应数值。

结论

该代码展示了使用高斯滤波器对图像进行平滑处理以去除高斯噪声。通过观察SSIM以及PSNR的值,其实高斯滤波对应高斯噪声有一定的过滤功能但是效果有限。

高斯滤波是一种线性平滑滤波器,根据像素周围邻域的加权平均值对像素进行平滑处理。该滤波器利用高斯函数来计算每个邻域像素的权重,使得距离中心像素越远的像素权重越低。这样可以在平滑图像的同时保留图像的边缘和细节。

通过调整高斯滤波器的核大小和标准差,可以控制滤波效果。较大的核大小和较小的标准差可以平滑更多的噪声,但可能会导致图像变模糊;较小的核大小和较大的标准差可以保留更多的细节,但可能无法完全去除所有噪声。

三.高斯噪音使用双边滤波去噪实验

代码
import cv2
import numpy as np
import matplotlib.pyplot as plt
from skimage.metrics import structural_similarity as ssim#读取图像
# 读取彩色图像
color_img = cv2.imread('image2.jpg')#图像替换image2.jpg# 读取灰度图像
gray_img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)#添加噪音
# 彩色图像添加高斯噪音
noise = np.random.normal(0, 50, color_img.shape)
noise_img = color_img + noise.astype('uint8')# 灰度化图像添加高斯噪音
noise = np.random.normal(0, 50, gray_img.shape)
img_noise = gray_img + noise.astype('uint8')#进行去噪处理
# 彩色图像进行双边滤波去噪处理
denoised_img =  cv2.bilateralFilter(color_img, 9, 30, 60)# 灰度化图像进行双边滤波去噪处理
img_denoised =  cv2.bilateralFilter(gray_img, 9, 30, 60)#显示结果
# 彩色图像显示结果
plt.subplot(231)
plt.imshow(cv2.cvtColor(color_img, cv2.COLOR_BGR2RGB))
plt.title('Original color_img')plt.subplot(232)
plt.imshow(cv2.cvtColor(noise_img, cv2.COLOR_BGR2RGB))
plt.title('Noisy color_img')plt.subplot(233)
plt.imshow(cv2.cvtColor(denoised_img , cv2.COLOR_BGR2RGB))
plt.title('Denoised color_img')# 灰度化图像显示结果
plt.subplot(234)
plt.imshow(gray_img, cmap='gray')
plt.title('Original gray_img')plt.subplot(235)
plt.imshow(img_noise, cmap='gray')
plt.title('Noisy gray_img')plt.subplot(236)
plt.imshow(img_denoised, cmap='gray')
plt.title('Denoised gray_img')plt.show()#评估结果
print("评估结果:")
print("彩色图像评估结果:")
# 计算均方误差
mse = np.mean((color_img - denoised_img )**2)# 计算差分图像
diff_image = denoised_img .astype(np.float64) - color_img.astype(np.float64)# 计算均方根误差
mse = np.mean(np.square(diff_image))
rmse = np.sqrt(mse)# 计算峰值信噪比
mse = np.mean((color_img - denoised_img )**2)
psnr = 20 * np.log10(255 / np.sqrt(mse))
print('峰值信噪比 PSNR:', psnr)
print('结构相似性 SSIM',ssim(color_img, denoised_img, channel_axis=2))
print("灰度化图像评估结果:")
# 计算均方误差
mse = np.mean((gray_img - img_denoised)**2)# 计算差分图像
diff_image = img_denoised.astype(np.float64) - gray_img.astype(np.float64)# 计算均方根误差
mse = np.mean(np.square(diff_image))
rmse = np.sqrt(mse)# 计算峰值信噪比
mse = np.mean((gray_img - img_denoised)**2)
psnr = 20 * np.log10(255 / np.sqrt(mse))
print('峰值信噪比 PSNR:', psnr)print('结构相似性 SSIM:',ssim(gray_img, img_denoised, channel_axis=1))
效果展示1

在这里插入图片描述

在这里插入图片描述

效果展示2

在这里插入图片描述

在这里插入图片描述

功能说明

对彩色图像以及其的灰度图添加高斯噪音,并分别使用双边滤波去噪,输出原图像和添加噪音的图像以及去噪后的图像,最后计算SSIM和PSNR对彩色图像和灰度图像的去噪效果进行评估,并输出相应数值。

结论

该代码展示了使用双边滤波器对图像进行平滑处理以去除高斯噪声。通过比较对应的PSNR和SSIM,可以得出,双边滤波对于高斯噪声有很好的去处效果。

双边滤波器是一种非线性滤波器,对图像中的每个像素同时考虑空间距离和像素值相似性,以计算每个像素的权重。在计算加权平均值时,空间距离权重和像素值相似性权重都起到了作用。这使得双边滤波器能够在平滑图像的同时,保留边缘和细节。

相比于其他平滑滤波器,双边滤波器能更好地保留图像的细节,并且对消除高斯噪声有较好的效果。它通过调整空间距离权重和像素值相似性权重这两个参数,可以控制滤波效果。较大的空间距离权重可以保留更多的边缘信息,较大的像素值相似性权重可以减少噪声。

综上所述,使用双边滤波去除高斯噪声是一种有效的图像降噪方法。它能够在平滑图像的同时保留细节,对于去除高斯噪声和保持图像质量具有良好的效果。

四.高斯噪音使用中值滤波去噪实验

代码
import cv2
import numpy as np
import matplotlib.pyplot as plt
from skimage.metrics import structural_similarity as ssim#读取图像
# 读取彩色图像
color_img = cv2.imread('image2.jpg')#图像替换image2.jpg# 读取灰度图像
gray_img = cv2.imread('image2.jpg', cv2.IMREAD_GRAYSCALE)#添加噪音
# 彩色图像添加高斯噪音
noise = np.random.normal(0, 50, color_img.shape)
noise_img = color_img + noise.astype('uint8')# 灰度化图像添加高斯噪音
noise = np.random.normal(0, 50, gray_img.shape)
img_noise = gray_img + noise.astype('uint8')#进行去噪处理
# 彩色图像进行中值滤波去噪处理
denoised_img = cv2.medianBlur(color_img, 5)# 灰度化图像进行中值滤波去噪处理
img_denoised = cv2.medianBlur(gray_img, 5)#显示结果
# 彩色图像显示结果
plt.subplot(231)
plt.imshow(cv2.cvtColor(color_img, cv2.COLOR_BGR2RGB))
plt.title('Original color_img')plt.subplot(232)
plt.imshow(cv2.cvtColor(noise_img, cv2.COLOR_BGR2RGB))
plt.title('Noisy color_img')plt.subplot(233)
plt.imshow(cv2.cvtColor(denoised_img , cv2.COLOR_BGR2RGB))
plt.title('Denoised color_img')
# 灰度化图像显示结果
plt.subplot(234)
plt.imshow(gray_img, cmap='gray')
plt.title('Original gray_img')plt.subplot(235)
plt.imshow(img_noise, cmap='gray')
plt.title('Noisy gray_img')plt.subplot(236)
plt.imshow(img_denoised, cmap='gray')
plt.title('Denoised gray_img')plt.show()#评估结果
print("评估结果:")
print("彩色图像评估结果:")
# 计算均方误差
mse = np.mean((color_img - denoised_img )**2)# 计算差分图像
diff_image = denoised_img .astype(np.float64) - color_img.astype(np.float64)# 计算均方根误差
mse = np.mean(np.square(diff_image))
rmse = np.sqrt(mse)# 计算峰值信噪比
mse = np.mean((color_img - denoised_img )**2)
psnr = 20 * np.log10(255 / np.sqrt(mse))
print('峰值信噪比 PSNR:', psnr)
print('结构相似性 SSIM',ssim(color_img, denoised_img, channel_axis=2))
print("灰度化图像评估结果:")
# 计算均方误差
mse = np.mean((gray_img - img_denoised)**2)# 计算差分图像
diff_image = img_denoised.astype(np.float64) - gray_img.astype(np.float64)# 计算均方根误差
mse = np.mean(np.square(diff_image))
rmse = np.sqrt(mse)# 计算峰值信噪比
mse = np.mean((gray_img - img_denoised)**2)
psnr = 20 * np.log10(255 / np.sqrt(mse))
print('峰值信噪比 PSNR:', psnr)print('结构相似性 SSIM:',ssim(gray_img, img_denoised, channel_axis=1))
效果展示1

在这里插入图片描述

在这里插入图片描述

效果展示2

在这里插入图片描述

在这里插入图片描述

功能说明

对彩色图像以及其的灰度图添加高斯噪音,并分别使用中值滤波去噪,输出原图像和添加噪音的图像以及去噪后的图像,最后计算SSIM和PSNR对彩色图像和灰度图像的去噪效果进行评估,并输出相应数值。

结论

该代码展示了使用中值滤波器对图像进行平滑处理以去除高斯噪声。通过对应的PSNR和SSIM,通过对图像应用中值滤波器,可以有效地滤除高斯噪声。

中值滤波器是一种非线性滤波器,它将每个像素的值替换为邻域窗口中所有像素值的中值。相比于线性滤波器,中值滤波器能够更好地抑制噪声,特别是对于椒盐噪声和高斯噪声等具有随机性的噪声类型。中值滤波器利用邻域像素值的排序统计特性,能够将噪声像素值与周围正常像素值进行区分。通过计算邻域窗口中像素值的中值并将其作为原像素值的替代,中值滤波器能够有效地平滑图像,并保持图像的边缘和细节。

相比于平均滤波器或高斯滤波器,中值滤波器更适用于去除高斯噪声。由于高斯噪声具有随机分布的特点,中值滤波器能够在不对图像进行过度平滑的情况下,将噪声像素正确地排除。

综上所述,使用中值滤波器对高斯噪声进行去除是一种简单而有效的方法。通过选择适当的邻域窗口大小,中值滤波器能够在保留图像细节的同时,有效地滤除高斯噪声。

椒盐噪音

一.高斯噪声不同参数对于图像的影响

调参代码
#添加噪音
# 彩色图像添加椒盐噪音
noise_img = np.zeros(color_img.shape, np.uint8)
probability = 0.05  # 噪音点的概率for i in range(color_img.shape[0]):for j in range(color_img.shape[1]):random = np.random.random()if random < probability/2:# 添加盐噪音noise_img[i, j] =(255, 255, 255)elif random < probability:# 添加椒噪音noise_img[i, j] = (0, 0, 0)else:noise_img[i, j] = color_img[i, j]# 灰度化图像添加椒盐噪音
img_noise = np.zeros(gray_img.shape, np.uint8)
probability = 0.05  # 噪音点的概率for i in range(gray_img.shape[0]):for j in range(gray_img.shape[1]):random = np.random.random()if random < probability/2:# 添加盐噪音img_noise[i, j] = 255elif random < probability:# 添加椒噪音img_noise[i, j] = 0else:img_noise[i, j] = gray_img[i, j]

主要通过改变噪音点的频率来达成调参

probability = 0.05 时

在这里插入图片描述

probability = 0.01 时

在这里插入图片描述

probability = 0.10 时

在这里插入图片描述

结论

其实椒盐噪声很简单,就是通过随机数和概率的比较来给图像随机添加噪声像素点,概率越大,对应噪声像素点出现概率越高。

二.椒盐噪音使用K近邻平均滤波去噪实验

代码
import cv2
import numpy as np
import matplotlib.pyplot as plt
from skimage.metrics import structural_similarity as ssim#读取图像
# 读取彩色图像
color_img = cv2.imread('image2.jpg')#图像替换image2.jpg# 读取灰度图像
gray_img = cv2.imread('image2.jpg', cv2.IMREAD_GRAYSCALE)#添加噪音
# 彩色图像添加椒盐噪音
noise_img = np.zeros(color_img.shape, np.uint8)
probability = 0.05  # 噪音点的概率for i in range(color_img.shape[0]):for j in range(color_img.shape[1]):random = np.random.random()if random < probability/2:# 添加盐噪音noise_img[i, j] =(255, 255, 255)elif random < probability:# 添加椒噪音noise_img[i, j] = (0, 0, 0)else:noise_img[i, j] = color_img[i, j]# 灰度化图像添加椒盐噪音
img_noise = np.zeros(gray_img.shape, np.uint8)
probability = 0.05  # 噪音点的概率for i in range(gray_img.shape[0]):for j in range(gray_img.shape[1]):random = np.random.random()if random < probability/2:# 添加盐噪音img_noise[i, j] = 255elif random < probability:# 添加椒噪音img_noise[i, j] = 0else:img_noise[i, j] = gray_img[i, j]#进行去噪处理
# 添加边缘
K = 3  # 取 K=3
border = K // 2
border_img = cv2.copyMakeBorder(color_img, border, border, border, border, cv2.BORDER_REFLECT)
img_border = cv2.copyMakeBorder(gray_img, border, border, border, border, cv2.BORDER_REFLECT)# 彩色图像进行K近邻平均滤波去噪处理
denoised_img = np.zeros(color_img.shape, np.uint8)
for i in range(border, border + color_img.shape[0]):for j in range(border, border + color_img.shape[1]):block = border_img[i-border:i+border+1, j-border:j+border+1]pixels = np.zeros((K**2, 3), np.uint8)for k in range(K):for l in range(K):pixels[k*K+l] = block[k][l]filtered_pixel = np.mean(pixels, axis=0)denoised_img [i-border, j-border] = filtered_pixel.astype(np.uint8)# 灰度化图像进行K近邻平均滤波去噪处理
img_denoised =np.zeros(gray_img.shape, np.uint8)
for i in range(border, border + gray_img.shape[0]):for j in range(border, border + gray_img.shape[1]):block = img_border[i-border:i+border+1, j-border:j+border+1]pixels = block.flatten()pixels = sorted(pixels)img_denoised [i-border, j-border] = np.mean(pixels[:K])#显示结果
# 彩色图像显示结果
plt.subplot(231)
plt.imshow(cv2.cvtColor(color_img, cv2.COLOR_BGR2RGB))
plt.title('Original color_img')plt.subplot(232)
plt.imshow(cv2.cvtColor(noise_img, cv2.COLOR_BGR2RGB))
plt.title('Noisy color_img')plt.subplot(233)
plt.imshow(cv2.cvtColor(denoised_img , cv2.COLOR_BGR2RGB))
plt.title('Denoised color_img')
# 灰度化图像显示结果
plt.subplot(234)
plt.imshow(gray_img, cmap='gray')
plt.title('Original gray_img')plt.subplot(235)
plt.imshow(img_noise, cmap='gray')
plt.title('Noisy gray_img')plt.subplot(236)
plt.imshow(img_denoised, cmap='gray')
plt.title('Denoised gray_img')plt.show()#评估结果
print("评估结果:")
print("彩色图像评估结果:")
# 计算均方误差
mse = np.mean((color_img - denoised_img )**2)# 计算差分图像
diff_image = denoised_img .astype(np.float64) - color_img.astype(np.float64)# 计算均方根误差
mse = np.mean(np.square(diff_image))
rmse = np.sqrt(mse)# 计算峰值信噪比
mse = np.mean((color_img - denoised_img )**2)
psnr = 20 * np.log10(255 / np.sqrt(mse))
print('峰值信噪比 PSNR:', psnr)print('结构相似性 SSIM',ssim(color_img, denoised_img, channel_axis=2))print("灰度化图像评估结果:")
# 计算均方误差
mse = np.mean((gray_img - img_denoised)**2)# 计算差分图像
diff_image = img_denoised.astype(np.float64) - gray_img.astype(np.float64)# 计算均方根误差
mse = np.mean(np.square(diff_image))
rmse = np.sqrt(mse)# 计算峰值信噪比
mse = np.mean((gray_img - img_denoised)**2)
psnr = 20 * np.log10(255 / np.sqrt(mse))
print('峰值信噪比 PSNR:', psnr)print('结构相似性 SSIM:',ssim(gray_img, img_denoised, channel_axis=1))
效果展示1

在这里插入图片描述

在这里插入图片描述

效果展示2

在这里插入图片描述

在这里插入图片描述

功能说明

对彩色图像以及其的灰度图添加椒盐噪音,并分别使用K近邻平均滤波去噪,输出原图像和添加噪音的图像以及去噪后的图像,最后计算SSIM和PSNR对彩色图像和灰度图像的去噪效果进行评估,并输出相应数值。

结论

经过实验测试,使用K近邻平均滤波器对图像进行去噪处理可以有效地减少椒盐噪声。通过观察两个图像处理完成后的实验1和实验2我们可以发现image1的图像psnr以及ssim明显比image2实验结果的大,证明其去噪效果更好。

椒盐噪声是一种随机出现的噪声,会导致图像中出现明显的黑白像素点。K近邻平均滤波器通过计算邻域窗口中的像素值的平均值,将中心像素的值替换为平均值,从而实现去噪的效果。

在实验中,我们选择适当的邻域窗口大小和K值,根据图像的噪声程度和细节要求,进行去噪处理。适当选择较大的邻域窗口可以平滑图像并降低噪声,同时保留图像的细节。较大的K值可以更好地抑制椒盐噪声。

总的来说,椒盐噪声是一种常见的噪声类型,而K近邻平均滤波器是一种简单而有效的滤波方法。通过调整邻域窗口大小和K值,可以在一定程度上去除椒盐噪声并改善图像质量。然而,使用K近邻平均滤波器可能会导致图像细节的损失,因此在应用时需要权衡去噪效果和细节保留的需求。

三.椒盐噪音使用均值滤波去噪实验

代码
import cv2
import numpy as np
import matplotlib.pyplot as plt
from skimage.metrics import structural_similarity as ssim# 读取图像
# 读取彩色图像
color_img = cv2.imread('image.jpg')  # 图像替换image2.jpg
# 读取灰度图像
gray_img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)# 添加噪音
# 彩色图像添加椒盐噪音
noise_img = np.zeros(color_img.shape, np.uint8)
probability = 0.20  # 噪音点的概率for i in range(color_img.shape[0]):for j in range(color_img.shape[1]):random = np.random.random()if random < probability / 2:# 添加盐噪音noise_img[i, j] = (255, 255, 255)elif random < probability:# 添加椒噪音noise_img[i, j] = (0, 0, 0)else:noise_img[i, j] = color_img[i, j]# 灰度化图像添加椒盐噪音
img_noise = np.zeros(gray_img.shape, np.uint8)
probability = 0.20  # 噪音点的概率
for i in range(gray_img.shape[0]):for j in range(gray_img.shape[1]):random = np.random.random()if random < probability/2:# 添加盐噪音img_noise[i, j] = 255elif random < probability:# 添加椒噪音img_noise[i, j] = 0else:img_noise[i, j] = gray_img[i, j]
# 进行去噪处理
# 彩色图像进行均值滤波去噪处理
denoised_img = cv2.blur(noise_img, (5, 5), 0)# 灰度化图像进行均值滤波去噪处理
img_denoised = cv2.blur(img_noise, (5, 5), 0)# 显示结果
# 彩色图像显示结果
plt.subplot(231)
plt.imshow(cv2.cvtColor(color_img, cv2.COLOR_BGR2RGB))
plt.title('Original color_img')plt.subplot(232)
plt.imshow(cv2.cvtColor(noise_img, cv2.COLOR_BGR2RGB))
plt.title('Noisy color_img')plt.subplot(233)
plt.imshow(cv2.cvtColor(denoised_img, cv2.COLOR_BGR2RGB))
plt.title('Denoised color_img')
# 灰度化图像显示结果
plt.subplot(234)
plt.imshow(gray_img, cmap='gray')
plt.title('Original gray_img')plt.subplot(235)
plt.imshow(img_noise, cmap='gray')
plt.title('Noisy gray_img')plt.subplot(236)
plt.imshow(img_denoised, cmap='gray')
plt.title('Denoised gray_img')plt.show()# 评估结果
print("评估结果:")
print("彩色图像评估结果:")
# 计算均方误差
mse = np.mean((color_img - denoised_img) ** 2)# 计算差分图像
diff_image = denoised_img.astype(np.float64) - color_img.astype(np.float64)# 计算均方根误差
mse = np.mean(np.square(diff_image))
rmse = np.sqrt(mse)# 计算峰值信噪比
mse = np.mean((color_img - denoised_img) ** 2)
psnr = 20 * np.log10(255 / np.sqrt(mse))
print('峰值信噪比 PSNR:', psnr)
print('结构相似性 SSIM',ssim(color_img, denoised_img, channel_axis=2))print("灰度化图像评估结果:")
# 计算均方误差
mse = np.mean((gray_img - img_denoised) ** 2)# 计算差分图像
diff_image = img_denoised.astype(np.float64) - gray_img.astype(np.float64)# 计算均方根误差
mse = np.mean(np.square(diff_image))
rmse = np.sqrt(mse)# 计算峰值信噪比
mse = np.mean((gray_img - img_denoised) ** 2)
psnr = 20 * np.log10(255 / np.sqrt(mse))
print('峰值信噪比 PSNR:', psnr)print('结构相似性 SSIM:',ssim(gray_img, img_denoised, channel_axis=1))
效果展示1

在这里插入图片描述

在这里插入图片描述

效果展示2

在这里插入图片描述

在这里插入图片描述

功能说明

对彩色图像以及其的灰度图添加椒盐噪音,并分别使用均值滤波去噪,输出原图像和添加噪音的图像以及去噪后的图像,最后SSIM和PSNR对彩色图像和灰度图像的去噪效果进行评估,并输出相应数值。

结论

经过实验测试,通过观察对应的PSNR和SSIM,使用均值滤波器对图像进行去噪处理对椒盐噪声的效果有限。

椒盐噪声是一种随机性的噪声,会在图像中产生黑色和白色的孤立像素。均值滤波器是一种线性滤波器,它通过计算邻域窗口中像素值的平均值来实现平滑效果。

然而,均值滤波器对于椒盐噪声的处理并不理想。由于椒盐噪声的随机性,黑白像素点的分布不均匀,使得均值滤波器在平均处理时受到噪声像素的干扰,导致去噪效果不佳。均值滤波器在处理椒盐噪声时可能会模糊图像细节并不能完全去除噪声。

因此,在处理椒盐噪声时,推荐使用其他更适合的滤波器,如中值滤波器或K近邻平均滤波器。这些滤波器对于椒盐噪声有更好的去噪效果,并能够保留图像的细节。均值滤波器可能更适合去除均匀分布的噪声,而不是椒盐噪声。

毛刺噪音

一.毛刺噪音不同参数对于图像的影响

调参代码
# 彩色图像添加毛刺噪音
noise_img = np.copy(color_img)
noise_level = 0.20  # 噪音水平,可以根据需要调整
# 每个像素根据噪音水平随机扰动
for i in range(noise_img.shape[0]):for j in range(noise_img.shape[1]):r = np.random.uniform(0, 1)if r < noise_level:noise_img[i, j] = [np.random.randint(0, 256), np.random.randint(0, 256), np.random.randint(0, 256)]
# 灰度化图像添加毛刺噪音
img_noise = np.copy(gray_img)
level_noise = 0.20  # 噪音水平,可以根据需要调整
# 每个像素根据噪音水平随机扰动
for i in range(img_noise.shape[0]):for j in range(img_noise.shape[1]):r = np.random.uniform(0, 1)if r < level_noise:img_noise[i, j] = np.random.randint(0, 256)

噪音水平为0.05时

在这里插入图片描述

噪音水平为0.10时

在这里插入图片描述

噪音水平为0.20时

在这里插入图片描述

结论

密度参数表示在图像中添加噪音的频率。较高的密度值会导致更多的毛刺噪音点出现在图像中,增加图像的复杂度。

噪声水平越高,噪声像素点出现的概率越高

代码中使用的是遍历每一个像素点,如果对应的随机值小于出现噪音的概率就会添加噪音。

二.毛刺噪音使用中值滤波去噪实验

代码
import cv2
import numpy as np
import matplotlib.pyplot as plt
from skimage.metrics import structural_similarity as ssim
#读取图像
# 读取彩色图像
color_img = cv2.imread('image.jpg')#图像替换image2.jpg# 读取灰度图像
gray_img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)#添加噪音
# 彩色图像添加毛刺噪音
noise_img = np.copy(color_img)
noise_level = 0.20  # 噪音水平,可以根据需要调整# 每个像素根据噪音水平随机扰动
for i in range(noise_img.shape[0]):for j in range(noise_img.shape[1]):r = np.random.uniform(0, 1)if r < noise_level:noise_img[i, j] = [np.random.randint(0, 256), np.random.randint(0, 256), np.random.randint(0, 256)]# 灰度化图像添加毛刺噪音
img_noise = np.copy(gray_img)
level_noise = 0.20  # 噪音水平,可以根据需要调整# 每个像素根据噪音水平随机扰动
for i in range(img_noise.shape[0]):for j in range(img_noise.shape[1]):r = np.random.uniform(0, 1)if r < level_noise:img_noise[i, j] = np.random.randint(0, 256)#进行去噪处理
# 彩色图像进行中值滤波去噪处理
denoised_img = cv2.medianBlur(color_img, 5)# 灰度化图像进行中值滤波去噪处理
img_denoised = cv2.medianBlur(gray_img, 5)#显示结果
# 彩色图像显示结果
plt.subplot(231)
plt.imshow(cv2.cvtColor(color_img, cv2.COLOR_BGR2RGB))
plt.title('Original color_img')plt.subplot(232)
plt.imshow(cv2.cvtColor(noise_img, cv2.COLOR_BGR2RGB))
plt.title('Noisy color_img')plt.subplot(233)
plt.imshow(cv2.cvtColor(denoised_img , cv2.COLOR_BGR2RGB))
plt.title('Denoised color_img')
# 灰度化图像显示结果
plt.subplot(234)
plt.imshow(gray_img, cmap='gray')
plt.title('Original gray_img')plt.subplot(235)
plt.imshow(img_noise, cmap='gray')
plt.title('Noisy gray_img')plt.subplot(236)
plt.imshow(img_denoised, cmap='gray')
plt.title('Denoised gray_img')plt.show()#评估结果
print("评估结果:")
print("彩色图像评估结果:")
# 计算均方误差
mse = np.mean((color_img - denoised_img )**2)# 计算差分图像
diff_image = denoised_img .astype(np.float64) - color_img.astype(np.float64)# 计算均方根误差
mse = np.mean(np.square(diff_image))
rmse = np.sqrt(mse)# 计算峰值信噪比
mse = np.mean((color_img - denoised_img )**2)
psnr = 20 * np.log10(255 / np.sqrt(mse))
print('峰值信噪比 PSNR:', psnr)print('结构相似性 SSIM',ssim(color_img, denoised_img, channel_axis=2))print("灰度化图像评估结果:")
# 计算均方误差
mse = np.mean((gray_img - img_denoised)**2)# 计算差分图像
diff_image = img_denoised.astype(np.float64) - gray_img.astype(np.float64)# 计算均方根误差
mse = np.mean(np.square(diff_image))
rmse = np.sqrt(mse)# 计算峰值信噪比
mse = np.mean((gray_img - img_denoised)**2)
psnr = 20 * np.log10(255 / np.sqrt(mse))
print('峰值信噪比 PSNR:', psnr)print('结构相似性 SSIM:',ssim(gray_img, img_denoised, channel_axis=1))
效果展示1

在这里插入图片描述

在这里插入图片描述

效果展示2

在这里插入图片描述

在这里插入图片描述

功能说明

对彩色图像以及其的灰度图添加毛刺噪音,并分别使用中值滤波去噪,输出原图像和添加噪音的图像以及去噪后的图像,最后计算SSIM和PSNR对彩色图像和灰度图像的去噪效果进行评估,并输出相应数值。

结论

中值滤波器是一种非线性滤波器,它将每个像素的值替换为邻域窗口中所有像素值的中值。相比于线性滤波器,中值滤波器能够更好地抑制噪声,特别是对于椒盐噪声和高斯噪声等具有随机性的噪声类型,同样也应用于毛刺噪音。中值滤波器利用邻域像素值的排序统计特性,能够将噪声像素值与周围正常像素值进行区分。通过计算邻域窗口中像素值的中值并将其作为原像素值的替代,中值滤波器能够有效地平滑图像,并保持图像的边缘和细节。

使用中值滤波器对毛刺噪声进行去除是一种简单而有效的方法。通过选择适当的邻域窗口大小,中值滤波器能够在保留图像细节的同时,有效地滤除高斯噪声。

三.毛刺噪音使用均值滤波去噪实验

代码
import cv2
import numpy as np
import matplotlib.pyplot as plt
from skimage.metrics import structural_similarity as ssim#读取图像
# 读取彩色图像
color_img = cv2.imread('image2.jpg')#图像替换image2.jpg# 读取灰度图像
gray_img = cv2.imread('image2.jpg', cv2.IMREAD_GRAYSCALE)#添加噪音
# 彩色图像添加毛刺噪音
noise_img = np.copy(color_img)
noise_level = 0.20# 噪音水平,可以根据需要调整# 每个像素根据噪音水平随机扰动
for i in range(noise_img.shape[0]):for j in range(noise_img.shape[1]):r = np.random.uniform(0, 1)if r < noise_level:noise_img[i, j] = [np.random.randint(0, 256), np.random.randint(0, 256), np.random.randint(0, 256)]# 灰度化图像添加毛刺噪音
img_noise = np.copy(gray_img)
level_noise = 0.20  # 噪音水平,可以根据需要调整# 每个像素根据噪音水平随机扰动
for i in range(img_noise.shape[0]):for j in range(img_noise.shape[1]):r = np.random.uniform(0, 1)if r < level_noise:img_noise[i, j] = np.random.randint(0, 256)#进行去噪处理
# 彩色图像进行均值滤波去噪处理
denoised_img =  cv2.blur(noise_img, (5,5), 0)# 灰度化图像进行均值滤波去噪处理
img_denoised =  cv2.blur(img_noise, (5, 5), 0)#显示结果
# 彩色图像显示结果
plt.subplot(231)
plt.imshow(cv2.cvtColor(color_img, cv2.COLOR_BGR2RGB))
plt.title('Original color_img')plt.subplot(232)
plt.imshow(cv2.cvtColor(noise_img, cv2.COLOR_BGR2RGB))
plt.title('Noisy color_img')plt.subplot(233)
plt.imshow(cv2.cvtColor(denoised_img , cv2.COLOR_BGR2RGB))
plt.title('Denoised color_img')
# 灰度化图像显示结果
plt.subplot(234)
plt.imshow(gray_img, cmap='gray')
plt.title('Original gray_img')plt.subplot(235)
plt.imshow(img_noise, cmap='gray')
plt.title('Noisy gray_img')plt.subplot(236)
plt.imshow(img_denoised, cmap='gray')
plt.title('Denoised gray_img')plt.show()#评估结果
print("评估结果:")
print("彩色图像评估结果:")
# 计算均方误差
mse = np.mean((color_img - denoised_img )**2)
# 计算差分图像
diff_image = denoised_img .astype(np.float64) - color_img.astype(np.float64)# 计算均方根误差
mse = np.mean(np.square(diff_image))
rmse = np.sqrt(mse)# 计算峰值信噪比
mse = np.mean((color_img - denoised_img )**2)
psnr = 20 * np.log10(255 / np.sqrt(mse))
print('峰值信噪比 PSNR:', psnr)
print('结构相似性 SSIM',ssim(color_img, denoised_img, channel_axis=2))print("灰度化图像评估结果:")
# 计算均方误差
mse = np.mean((gray_img - img_denoised)**2)# 计算差分图像
diff_image = img_denoised.astype(np.float64) - gray_img.astype(np.float64)# 计算均方根误差
mse = np.mean(np.square(diff_image))
rmse = np.sqrt(mse)# 计算峰值信噪比
mse = np.mean((gray_img - img_denoised)**2)
psnr = 20 * np.log10(255 / np.sqrt(mse))
print('峰值信噪比 PSNR:', psnr)print('结构相似性 SSIM:',ssim(gray_img, img_denoised, channel_axis=1))
效果展示1

在这里插入图片描述

在这里插入图片描述

效果展示2

在这里插入图片描述

在这里插入图片描述

功能说明

对彩色图像以及其的灰度图添加毛刺噪音,并分别使用均值滤波去噪,输出原图像和添加噪音的图像以及去噪后的图像,最后计算SSIM和PSNR对彩色图像和灰度图像的去噪效果进行评估,并输出相应数值。

结论

经过实验测试,通过观察对应的PSNR和SSIM,使用均值滤波器对图像进行去噪处理对毛刺噪声的效果有限。

均值滤波器对于椒盐噪声的处理并不理想。由于毛刺噪声的随机性,黑白像素点的分布不均匀,使得均值滤波器在平均处理时受到噪声像素的干扰,导致去噪效果不佳。均值滤波器在处理毛刺噪声时可能会模糊图像细节并不能完全去除噪声。

因此,在处理毛刺噪声时,推荐使用其他更适合的滤波器,如中值滤波器或K近邻平均滤波器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/83728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

永磁同步电机公式总结【一】——反电动势、磁链、转矩公式;三项、两项电压方程;坐标表换方程

一、PMSM 电机参数介绍 1.1 转子极数 转子极数 (Rotor Poles) &#xff1a;三相交流电机每组线圈都会产生 N、S 磁极&#xff0c;每个电机每相含有的永磁体磁极个数就是极数。由于磁极是成对出现的&#xff0c;所以电机有 2、4、6、8……极 (偶数)。 未知参数的电机&#xff…

eMMC深度解析:嵌入式多媒体卡的硬件电路设计要点

一、eMMC 技术深度解析 1.定义与背景 eMMC&#xff08;Embedded Multi Media Card&#xff09;是一种专为嵌入式系统设计的非易失性存储解决方案&#xff0c;它将 NAND 闪存、主控芯片和接口协议封装在一个 BGA&#xff08;Ball Grid Array&#xff09;封装中。其核心目标是简…

常见提示词攻击方法和防御手段——提示词越狱

提示词越狱&#xff08;Prompt Jailbreaking&#xff09;是一种针对大型语言模型&#xff08;LLM&#xff09;的攻击手段&#xff0c;旨在通过精心设计的输入提示绕过模型的安全审查和伦理限制&#xff0c;使其生成原本被禁止的内容&#xff08;如暴力、非法操作、敏感信息等&a…

MySQL之基础事务和隔离级别

目录 引言&#xff1a; 什么是事务&#xff1f; 事务和锁 mysql数据库控制台事务的几个重要操作指令&#xff08;transaction.sql&#xff09; 1、事物操作示意图&#xff1a; 2.事务的隔离级别 四种隔离级别&#xff1a; 总结一下隔离指令 1. 查看当前隔离级别​​ …

学习记录:DAY29

项目开发日志&#xff1a;技术实践与成长之路 前言 回顾这几天的状态&#xff0c;热情总是比我想象中更快被消耗完。比起茫然徘徊的小丑&#xff0c;我更希望自己是对着风车冲锋的疯子。 今天继续深入项目的实际业务。 状态好点的时候&#xff0c;再看自己EMO时写的东西&…

kotlin Android AccessibilityService 无障碍入门

安卓的无障碍模式可以很好的进行自动化操作以帮助视障人士自动化完成一些任务。 无障碍可以做到&#xff0c;监听屏幕变化&#xff0c;朗读文本&#xff0c;定位以及操作控件等。 以下从配置到代码依次进行无障碍设置与教程。 一、配置 AndroidManifest.xml 无障碍是个服务…

【Vue篇】数据秘语:从watch源码看响应式宇宙的蝴蝶效应

目录 引言 一、watch侦听器&#xff08;监视器&#xff09; 1.作用&#xff1a; 2.语法&#xff1a; 3.侦听器代码准备 4. 配置项 5.总结 二、翻译案例-代码实现 1.需求 2.代码实现 三、综合案例——购物车案例 1. 需求 2. 代码 引言 &#x1f4ac; 欢迎讨论&#…

WPS中代码段的识别方法及JS宏实现

在WPS中&#xff0c;文档的基本结构可以通过对象模型来理解&#xff1a; &#xff08;1&#xff09;Document对象&#xff1a;表示整个文档 &#xff08;2&#xff09;Range对象&#xff1a;表示文档中的一段连续区域&#xff0c;可以是一个字符、一个句子或整个文档 &#…

el-tree结合el-tree-transfer实现穿梭框里展示树形数据

参考文章&#xff1a;我把他的弹框单拉出来一个独立文件作为组件方便使用&#xff0c;遇到一些问题记录一下。 testComponet.vue <template><div class"per_container"><div class"per_con_left"><div class"per_con_title&q…

Go 后端中双 token 的实现模板

下面是一个典型的 Go 后端双 Token 认证机制 实现模板&#xff0c;使用 Gin 框架 JWT Redis&#xff0c;结构清晰、可拓展&#xff0c;适合实战开发。 项目结构建议 /utils├── jwt.go // Access & Refresh token 的生成和解析├── claims.go // 从请求…

Typescript学习教程,从入门到精通,TypeScript 对象语法知识点及案例代码(7)

TypeScript 对象语法知识点及案例代码 TypeScript 是 JavaScript 的超集&#xff0c;提供了静态类型检查和其他增强功能。在 TypeScript 中&#xff0c;对象是面向对象编程&#xff08;OOP&#xff09;的基础。 一、对象概述 在 TypeScript 中&#xff0c;对象是属性的集合&a…

应用BERT-GCN跨模态情绪分析:贸易缓和与金价波动的AI归因

本文运用AI量化分析框架&#xff0c;结合市场情绪因子、宏观经济指标及技术面信号&#xff0c;对黄金与美元指数的联动关系进行解析&#xff0c;揭示本轮贵金属回调的深层驱动因素。 周三&#xff0c;现货黄金价格单日跌幅达2.1%&#xff0c;盘中触及3167.94美元/盎司关键价位&…

命令行登录 MySQL 报 Segmentation fault 故障解决

问题描述&#xff1a;对 mysql8.0.35 源码进行 make&#xff0c;由于一开始因为yum源问题少安装依赖库 库&#xff0c;在链接时遇到错误 undefined reference to&#xff0c;后来安装了相关依赖库&#xff0c;再次 make 成功。于是将 mysqld 启动&#xff0c;再用 mysql -u roo…

Axure设计数字乡村可视化大屏:构建乡村数据全景图

今天&#xff0c;让我们一同深入了解由Axure设计的数字乡村可视化大屏&#xff0c;看看它如何通过精心的布局和多样化的图表类型&#xff0c;将乡村的各类数据以直观、易懂的方式呈现出来&#xff0c;为乡村管理者提供有力的数据支持。 原型效果预览链接&#xff1a;Axure数字乡…

3D个人简历网站 4.小岛

1.模型素材 在Sketchfab上下载狐狸岛模型&#xff0c;然后转换为素材资源asset&#xff0c;嫌麻烦直接在网盘链接下载素材&#xff0c; Fox’s islandshttps://sketchfab.com/3d-models/foxs-islands-163b68e09fcc47618450150be7785907https://gltf.pmnd.rs/ 素材夸克网盘&a…

智能开发工具PhpStorm v2025.1——增强AI辅助编码功能

PhpStorm是一个轻量级且便捷的PHP IDE&#xff0c;其旨在提高用户效率&#xff0c;可深刻理解用户的编码&#xff0c;提供智能代码补全&#xff0c;快速导航以及即时错误检查。可随时帮助用户对其编码进行调整&#xff0c;运行单元测试或者提供可视化debug功能。 立即获取PhpS…

Spark 的运行模式(--master) 和 部署方式(--deploy-mode)

Spark 的 运行模式&#xff08;--master&#xff09; 和 部署方式&#xff08;--deploy-mode&#xff09;&#xff0c;两者的核心区别在于 资源调度范围 和 Driver 进程的位置。 一、核心概念对比 维度--master&#xff08;运行模式&#xff09;--deploy-mode&#xff08;部署…

sqli—labs第八关——布尔盲注

一&#xff1a;确定注入类型 按照我们之前的步骤来 输入 ?id1 and 11-- ?id1 and 12-- 界面正常 第二行界面异常空白 所以注入类型为单引号闭合型 二&#xff1a; 布尔盲注 1.判断是否使用条件 &#xff08;1&#xff09;&#xff1a;存在注入但不会直接显示查询结果 …

ARP 原理总结

&#x1f310; 一、ARP 原理总结 ARP&#xff08;Address Resolution Protocol&#xff09;是用于通过 IP 地址解析 MAC 地址的协议&#xff0c;工作在 链路层 与 网络层之间&#xff08;OSI 模型的第三层与第二层之间&#xff09;。 &#x1f501; ARP通信过程&#xff1a; …

SpringCloud——EureKa

目录 1.前言 1.微服务拆分及远程调用 3.EureKa注册中心 远程调用的问题 eureka原理 搭建EureKaServer 服务注册 服务发现 1.前言 分布式架构&#xff1a;根据业务功能对系统进行拆分&#xff0c;每个业务模块作为独立项目开发&#xff0c;称为服务。 优点&#xff1a; 降…