裝修照片seo推廣哪家好
一、簡(jiǎn)介:
在數(shù)字圖像處理領(lǐng)域,噪聲一直是影響圖像質(zhì)量的重要因素。無(wú)論是拍攝過(guò)程中的環(huán)境干擾,還是傳輸過(guò)程中的信號(hào)失真,噪聲都可能導(dǎo)致圖像模糊、細(xì)節(jié)丟失,甚至影響后續(xù)的圖像分析和應(yīng)用。為了提高圖像的視覺效果和使用價(jià)值,圖像去噪技術(shù)應(yīng)運(yùn)而生,成為圖像預(yù)處理環(huán)節(jié)中不可或缺的一環(huán)。在本文中介紹幾個(gè)常用的傳統(tǒng)圖像去噪的方法以及其應(yīng)用情景。
文章目錄
- 一、簡(jiǎn)介:
- 二:常用的去噪方法梳理:
- 三:簡(jiǎn)述與實(shí)現(xiàn)方法:
- 3.1均值濾波
- 3.2中值濾波
- 3.3高斯濾波
- 3.4雙邊濾波
- 3.5非局部均值去噪
- 3.6引導(dǎo)濾波去噪
- 3.7小波變換去噪
二:常用的去噪方法梳理:
在傳統(tǒng)圖像處理領(lǐng)域,去噪技術(shù)是提高圖像質(zhì)量的重要手段。以下是一些常見的去噪技術(shù):
- 均值濾波去噪:該方法通過(guò)對(duì)圖像中的每個(gè)像素點(diǎn)及其鄰域內(nèi)的像素點(diǎn)取平均值,來(lái)替代原始像素值,從而實(shí)現(xiàn)去噪。均值濾波簡(jiǎn)單易實(shí)現(xiàn),但容易導(dǎo)致圖像邊緣模糊。
- 中值濾波去噪:中值濾波將圖像中每個(gè)像素點(diǎn)與其鄰域內(nèi)的像素點(diǎn)進(jìn)行排序,取中值作為濾波結(jié)果。這種方法在去除噪聲的同時(shí),能較好地保護(hù)圖像的邊緣信息。
- 高斯濾波去噪:高斯濾波是一種加權(quán)平均濾波,權(quán)重是根據(jù)高斯函數(shù)計(jì)算得出的。它能夠有效地去除圖像中的高斯噪聲,同時(shí)保留圖像的細(xì)節(jié)。
- 雙邊濾波去噪:雙邊濾波結(jié)合了空間鄰近度和像素值相似度,是一種保邊緣的濾波方法。它既能去除噪聲,又能保持圖像的邊緣信息。
- 非局部均值去噪:非局部均值去噪考慮了圖像中重復(fù)的紋理信息,通過(guò)搜索整個(gè)圖像來(lái)尋找相似塊,并進(jìn)行加權(quán)平均。這種方法在去除噪聲的同時(shí),能更好地保持圖像的細(xì)節(jié)和結(jié)構(gòu)。
- 引導(dǎo)濾波去噪:引導(dǎo)濾波利用引導(dǎo)圖像與待濾波圖像之間的關(guān)系,對(duì)圖像進(jìn)行局部線性濾波。這種方法在去噪的同時(shí),能有效保護(hù)圖像的邊緣和細(xì)節(jié)。
- 小波變換去噪:小波變換將圖像分解為不同尺度和方向的小波系數(shù),通過(guò)對(duì)這些系數(shù)進(jìn)行閾值處理,達(dá)到去噪的目的。小波變換去噪在去除噪聲的同時(shí),能較好地保留圖像的紋理和細(xì)節(jié)。
三:簡(jiǎn)述與實(shí)現(xiàn)方法:
3.1均值濾波
均值濾波是一種簡(jiǎn)單的圖像去噪方法,屬于線性濾波器的一種。它的基本思想是用目標(biāo)像素周圍鄰域內(nèi)的像素的平均值來(lái)代替目標(biāo)像素的值,從而消除圖像中的隨機(jī)噪聲。
均值濾波常用于圖像預(yù)處理階段,特別是在需要快速去噪且對(duì)圖像細(xì)節(jié)要求不高的場(chǎng)合或者用于模糊圖像細(xì)節(jié)只保留顏色等圖像低頻信息。
代碼如下:
import cv2
# 讀取圖像
image = cv2.imread('noisy_image.jpg', cv2.IMREAD_GRAYSCALE)
# 應(yīng)用3x3的均值濾波
blurred_image = cv2.blur(image, (3, 3))
# 顯示原圖和均值濾波后的圖像
cv2.imshow('Original Image', image)
cv2.imshow('Blurred Image', blurred_image)
# 等待按鍵后退出
cv2.waitKey(0)
cv2.destroyAllWindows()
3.2中值濾波
中值濾波是一種非線性的數(shù)字濾波技術(shù),主要用于去除圖像中的椒鹽噪聲(由離散的黑白像素組成)和其他類型的脈沖噪聲。中值濾波器的核心思想是使用像素鄰域中的像素值的中值來(lái)代替目標(biāo)像素的值。
中值濾波一般都用在黑白蒙版上用來(lái)去除二值化后所帶來(lái)的椒鹽噪聲,以此來(lái)獲取干凈的蒙版。
代碼如下:
import cv2# 讀取圖像
image = cv2.imread('noisy_image.jpg', cv2.IMREAD_GRAYSCALE)
# 應(yīng)用3x3的中值濾波
median_filtered_image = cv2.medianBlur(image, 3)
# 顯示原圖和均值濾波后的圖像
cv2.imshow('Original Image', image)
cv2.imshow('Median Filtered Image', median_filtered_image)
# 等待按鍵后退出
cv2.waitKey(0)
cv2.destroyAllWindows()
3.3高斯濾波
高斯濾波是一種基于高斯函數(shù)的線性平滑濾波器,用于去除圖像中的噪聲,同時(shí)保留圖像的邊緣和細(xì)節(jié)。它通過(guò)對(duì)圖像中每個(gè)像素的值進(jìn)行加權(quán)平均來(lái)實(shí)現(xiàn)去噪,其中權(quán)重由高斯函數(shù)確定。使用高斯濾波參數(shù)的時(shí)候通常,可以從較小的標(biāo)準(zhǔn)差和核大小開始,逐漸增加,直到找到一個(gè)平衡點(diǎn),既能有效去除噪聲,又能保留圖像的細(xì)節(jié)。
代碼如下:
import cv2
# 讀取圖像
image = cv2.imread('noisy_image.jpg', cv2.IMREAD_GRAYSCALE)
# 應(yīng)用高斯濾波,這里使用3x3的窗口和標(biāo)準(zhǔn)差為2的高斯核
gaussian_filtered_image = cv2.GaussianBlur(image, (3, 3), 2)
# 顯示原圖和高斯濾波后的圖像
cv2.imshow('Original Image', image)
cv2.imshow('Gaussian Filtered Image', gaussian_filtered_image)
# 等待按鍵后退出
cv2.waitKey(0)
cv2.destroyAllWindows()
3.4雙邊濾波
雙邊濾波是一種非線性的濾波技術(shù),用于去除圖像中的噪聲,同時(shí)盡可能保留邊緣細(xì)節(jié)。與高斯濾波器不同,雙邊濾波器考慮了像素之間的空間鄰近性和像素值相似性,從而在去除噪聲的同時(shí)更好地保留邊緣。雙邊濾波器能夠很好地保留圖像的邊緣和細(xì)節(jié),因?yàn)樗粌H考慮像素的空間鄰近性,還考慮像素值的相似性。但相應(yīng)的雙邊濾波器的計(jì)算復(fù)雜度較高,推理時(shí)間相對(duì)較慢。
代碼如下:
import cv2# 讀取圖像
image = cv2.imread('noisy_image.jpg', cv2.IMREAD_GRAYSCALE)
# 應(yīng)用雙邊濾波,這里使用3x3的窗口
bilateral_filtered_image = cv2.bilateralFilter(image, 9, 25, 25)
# 顯示原圖和雙邊濾波后的圖像
cv2.imshow('Original Image', image)
cv2.imshow('Bilateral Filtered Image', bilateral_filtered_image)
# 等待按鍵后退出
cv2.waitKey(0)
cv2.destroyAllWindows()
雙邊濾波有三個(gè)參數(shù)
- diameter: 鄰域大小,以像素為單位。這個(gè)參數(shù)決定了濾波器的鄰域大小。較大的直徑可以覆蓋更多的像素,從而更好地平滑噪聲,但可能會(huì)模糊邊緣。較小的直徑則可以更好地保留邊緣細(xì)節(jié),但去噪效果可能不夠理想。
- sigmaColor: 顏色空間相似性的權(quán)重。較大的值會(huì)更多地平滑顏色差異較大的像素,而較小的值會(huì)更多地保留顏色差異較大的像素。這個(gè)參數(shù)控制了顏色空間內(nèi)的相似性權(quán)重。
- sigmaSpace: 空間鄰近性的權(quán)重。較大的值會(huì)更多地平滑空間上相鄰的像素,而較小的值會(huì)更多地保留空間上相鄰的像素。這個(gè)參數(shù)控制了空間鄰近性權(quán)重。的權(quán)重值可以更好地保留邊緣,但去噪效果可能不夠理想。
3.5非局部均值去噪
非局部均值去噪(Non-Local Means Denoising)是一種基于圖像內(nèi)容相似性的去噪方法,它通過(guò)搜索圖像中的相似塊,并計(jì)算這些相似塊的平均值來(lái)估計(jì)目標(biāo)像素的值,從而實(shí)現(xiàn)去噪。這種方法特別適用于去除高斯噪聲和其他類型的隨機(jī)噪聲
代碼如下:
import cv2
# 讀取圖像
image = cv2.imread('noisy_image.jpg', cv2.IMREAD_GRAYSCALE)
# 應(yīng)用非局部均值去噪
non_local_filtered_image = cv2.fastNlMeansDenoising(image, None, 10,10, 10, 7)
# 顯示原圖和非局部均值去噪后的圖像
cv2.imshow('Original Image', image)
cv2.imshow('Non-Local Means Filtered Image', non_local_filtered_image)
# 等待按鍵后退出
cv2.waitKey(0)
cv2.destroyAllWindows()
其參數(shù)為:
- image: 輸入圖像,可以是灰度圖像或彩色圖像。
- dst: 輸出圖像,用于存儲(chǔ)去噪后的結(jié)果。如果不指定,則由函數(shù)自動(dòng)分配。
- h: 噪聲估計(jì)的標(biāo)準(zhǔn)差。該參數(shù)控制了去噪的強(qiáng)度,較大的值會(huì)更多地去除噪聲,但可能會(huì)模糊圖像的細(xì)節(jié)。較小的值則可以更好地保留細(xì)節(jié),但去噪效果可能不夠理想。
- hforcolorcomponents:與h相同,但僅用于彩色圖像。(通常與H相同)
- templateWindowSize: 模板窗口大小,以像素為單位。較大的值可以覆蓋更多的像素,從而更好地平滑噪聲,但可能會(huì)模糊邊緣。較小的值則可以更好地保留邊緣細(xì)節(jié),但去噪效果可能不夠理想。
- searchWindowSize: 搜索窗口大小,以像素為單位。較大的值可以覆蓋更多的像素,從而更好地平滑噪聲,但可能會(huì)模糊邊緣。較小的值則可以更好地保留邊緣細(xì)節(jié),但去噪效果可能不夠理想。
3.6引導(dǎo)濾波去噪
**引導(dǎo)濾波(Guided Filter)**是一種無(wú)監(jiān)督的線性濾波器,它能夠根據(jù)輸入圖像和引導(dǎo)圖像(Guide Image)來(lái)估計(jì)輸出圖像。引導(dǎo)濾波去噪是引導(dǎo)濾波的一種應(yīng)用,它利用引導(dǎo)圖像來(lái)指導(dǎo)濾波器去除噪聲,從而保留圖像的細(xì)節(jié)。
代碼如下:
def guidedfilter(I, p, r, eps):# 獲取圖像的高度和寬度height, width = I.shape# 計(jì)算引導(dǎo)圖像I的局部均值m_I = cv2.boxFilter(I, -1, (r, r))# 計(jì)算輸入圖像p的局部均值m_p = cv2.boxFilter(p, -1, (r, r))# 計(jì)算引導(dǎo)圖像I和輸入圖像p的局部乘積的均值m_Ip = cv2.boxFilter(I * p, -1, (r, r))# 計(jì)算引導(dǎo)圖像I和輸入圖像p的局部協(xié)方差cov_Ip = m_Ip - m_I * m_p# 計(jì)算引導(dǎo)圖像I自身的局部協(xié)方差,即局部方差m_II = cv2.boxFilter(I * I, -1, (r, r))var_I = m_II - m_I * m_I# 估計(jì)線性系數(shù)aa = cov_Ip / (var_I + eps)# 估計(jì)線性系數(shù)bb = m_p - a * m_I# 對(duì)系數(shù)a和b進(jìn)行全局均值濾波,得到平滑的系數(shù)m_a = cv2.boxFilter(a, -1, (r, r))m_b = cv2.boxFilter(b, -1, (r, r))# 計(jì)算輸出圖像,即m_a * I + m_breturn m_a * I + m_b
參數(shù)說(shuō)明:
I: 輸入圖像,可以是灰度圖像或彩色圖像。
p: 引導(dǎo)圖像,用于指導(dǎo)濾波器。引導(dǎo)圖像應(yīng)與輸入圖像具有相同的尺寸和類型。
r: 引導(dǎo)濾波器的半徑,以像素為單位。較大的半徑可以覆蓋更多的像素,從而更好地平滑噪聲,但可能會(huì)模糊邊緣。較小的半徑則可以更好地保留邊緣細(xì)節(jié),但去噪效果可能不夠理想。
eps: 引導(dǎo)濾波器的正則化參數(shù)。較大的值可以更好地平滑噪聲,但可能會(huì)模糊圖像的細(xì)節(jié)。較小的值則可以更好地保留細(xì)節(jié),但去噪效果可能不夠理想。
3.7小波變換去噪
**小波變換(Wavelet Transform)**是一種在數(shù)學(xué)和信號(hào)處理中常用的分析工具,它能夠?qū)⒁粋€(gè)信號(hào)或函數(shù)表示為一系列基函數(shù)(小波函數(shù))的疊加。這些基函數(shù)被稱為小波基,它們是具有特定頻率和時(shí)間特性的函數(shù)。小波變換可以將信號(hào)分解為不同的頻率成分,這些成分稱為小波系數(shù)。常用的小基波有如下幾種:Haar小波、Daubechies小波、Symlet小波等。常用的小波變換集成在pywt庫(kù)中。
安裝:pip install PyWavelets
代碼如下:
import numpy as np
import matplotlib.pyplot as plt
from pywt import Wavelet, dwt2, idwt2
# 讀取圖像
image = plt.imread('image.jpg') # 假設(shè)圖像以BGR格式讀取
# 轉(zhuǎn)換為灰度圖像
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 選擇小波基,這里使用的是 'db4'
wavelet = Wavelet('db4')
# 執(zhí)行二維離散小波變換
coeffs = dwt2(image_gray, wavelet)
# 顯示小波系數(shù)
titles = ['LL', 'LH', 'HL', 'HH']
coeffs_image = [coeffs[0], coeffs[1][0], coeffs[1][1], coeffs[2]]
for i, a in enumerate(coeffs_image):plt.subplot(2, 2, i + 1), plt.imshow(a, cmap='gray')plt.title(titles[i]), plt.xticks([]), plt.yticks([])plt.show()# 執(zhí)行逆二維離散小波變換,重構(gòu)圖像
reconstructed_image = idwt2(coeffs, wavelet)
# 顯示重構(gòu)后的圖像
plt.imshow(reconstructed_image, cmap='gray')
plt.title('Reconstructed Image'), plt.xticks([]), plt.yticks([])
plt.show()
其中常用的小基波可以選擇下面幾種:
wavelets = [‘db2’, ‘db4’, ‘db6’, ‘db8’, ‘sym2’, ‘sym4’, ‘sym6’, ‘sym8’, ‘coif1’, ‘coif2’, ‘coif3’, ‘coif4’]
其分別代表:
- Daubechies小波 (‘dbN’):
○ N 表示濾波器的階數(shù),N 越大,濾波器越長(zhǎng),光滑性越好。
○ 常用的階數(shù)有 db2, db4, db6, db8 等。 - Symlet小波 (‘symN’):
○ Symlet小波是Daubechies小波的改進(jìn)版,具有更好的對(duì)稱性。
○ 常用的階數(shù)有 sym2, sym4, sym6, sym8 等。 - Coiflet小波 (‘coifN’):
○ Coiflet小波提供了比Daubechies小波更高的消失矩。
○ 常用的階數(shù)有 coif1, coif2, coif3, coif4 等。
在選擇小波基時(shí),需要考慮以下因素:
● 光滑性:階數(shù)較高的Daubechies小波或Symlet小波具有較好的光滑性。
● 消失矩:較高的消失矩可以幫助更好地表示信號(hào)的瞬時(shí)特性。
● 對(duì)稱性:Symlet小波具有更好的對(duì)稱性,有助于減少相位失真。
● 計(jì)算復(fù)雜度:階數(shù)較高的Daubechies小波計(jì)算復(fù)雜度較高。
在實(shí)際應(yīng)用中,通常需要根據(jù)具體的需求和圖像特性來(lái)選擇合適的小波基。例如,對(duì)于需要較高光滑性的圖像,可以選擇 db6 或 sym8 作為小波基。對(duì)于需要較高消失矩的圖像,可以選擇 coif4 作為小波基。