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.pswp.cn/diannao/83728.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83728.shtml
英文地址,請注明出處:http://en.pswp.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; 降…