日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

改进的自适应中值滤波算法 去除椒盐噪声 python 代码实现

發(fā)布時間:2024/8/1 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 改进的自适应中值滤波算法 去除椒盐噪声 python 代码实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

完整代碼可以在 我的AI學(xué)習(xí)筆記 - github 中獲取

原理

傳統(tǒng)的中值濾波算法在椒鹽噪聲的去除領(lǐng)域有著比較廣泛的應(yīng)用,其具有較強(qiáng)的噪點(diǎn)鑒別和恢復(fù)能力,也有比較低的時間復(fù)雜度:其基本思想是采用像素點(diǎn)周圍鄰接的若干像素點(diǎn)的中值來代替被污染的像素點(diǎn);但也存在一定的缺陷,隨著圖像被污染程度的加深,此方法恢復(fù)的圖像細(xì)節(jié)模糊、邊緣損失也會越嚴(yán)重。

中值濾波的思想就是比較一定領(lǐng)域內(nèi)的像素值的大小,取出其中值作為這個領(lǐng)域的中心像素新的值。假設(shè)對一定領(lǐng)域內(nèi)的所有像素從小到大進(jìn)行排序,如果存在孤立的噪聲點(diǎn),比如椒鹽噪聲(椒噪聲——較小的灰度值,呈現(xiàn)的效果是小黑點(diǎn);鹽噪聲——較大的灰度值,呈現(xiàn)的效果是小白點(diǎn)),那么從小到大排序的這個數(shù)組中,那些孤立的噪聲一定會分布在兩邊(要么很小,要么很大),這樣子取出的中值點(diǎn)可以很好地保留像素信息,而濾除了噪聲點(diǎn)的影響。
中值濾波器受濾波窗口大小影響較大,用于消除噪聲和保護(hù)圖像細(xì)節(jié),兩者會存在沖突。如果窗口較小,則能較好地保護(hù)圖像中的一些細(xì)節(jié)信息,但對噪聲的過濾效果就會打折扣;反之,如果窗口尺寸較大則會有較好的噪聲過濾效果,但也會對圖像造成一定的模糊效果,從而丟失一部分細(xì)節(jié)信息。

此處采用改進(jìn)的自適應(yīng)中值濾波算法進(jìn)行圖像恢復(fù):

  • 根據(jù)圖像處理的空間相關(guān)性原則,采用自適應(yīng)的方法選擇不同的滑動窗口大小;
  • 在算法中單濾波窗口大小達(dá)到最大值時,采用均值濾波;
  • 代碼實(shí)現(xiàn)

    def get_window(res_img,noise_mask,sc,i,j,k):listx = []if i-sc >= 0:starti = i-sc else:starti = 0if j+1 <= res_img.shape[1]-1 and noise_mask[0,j+1,k] !=0:listx.append(res_img[0,j+1,k])if j-1 >=0 and noise_mask[0,j-1,k] !=0:listx.append(res_img[0,j-1,k])if i+sc <= res_img.shape[0]-1:endi = i+scelse:endi = res_img.shape[0]-1if j+1 <= res_img.shape[1]-1 and noise_mask[endi,j+1,k] !=0:listx.append(res_img[endi,j+1,k])if j-1 >=0 and noise_mask[endi,j-1,k] !=0:listx.append(res_img[endi,j-1,k])if j+sc <= res_img.shape[1]-1:endj = j+scelse:endj = res_img.shape[1]-1if i+1 <= res_img.shape[0]-1 and noise_mask[i+1,endj,k] !=0:listx.append(res_img[i+1,endj,k])if i-1 >=0 and noise_mask[i-1,endj,k] !=0:listx.append(res_img[i-1,endj,k])if j-sc >= 0:startj = j-scelse:startj = 0if i+1 <= res_img.shape[0]-1 and noise_mask[i+1,0,k] !=0:listx.append(res_img[i+1,0,k])if i-1 >=0 and noise_mask[i-1,0,k] !=0:listx.append(res_img[i-1,0,k])for m in range(starti,endi+1):for n in range(startj,endj+1):if noise_mask[m,n,k] != 0:listx.append(res_img[m,n,k])listx.sort()return listxdef get_window_small(res_img,noise_mask,i,j,k):listx = []sc = 1 if i-sc >= 0 and noise_mask[i-1,j,k]!=0:listx.append(res_img[i-1,j,k])if i+sc <= res_img.shape[0]-1 and noise_mask[i+1,j,k]!=0:listx.append(res_img[i+1,j,k])if j+sc <= res_img.shape[1]-1 and noise_mask[i,j+1,k]!=0:listx.append(res_img[i,j+1,k])if j-sc >= 0 and noise_mask[i,j-1,k]!=0:listx.append(res_img[i,j-1,k])listx.sort()return listxdef restore_image(noise_img, size=4):"""使用 你最擅長的算法模型 進(jìn)行圖像恢復(fù)。:param noise_img: 一個受損的圖像:param size: 輸入?yún)^(qū)域半徑,長寬是以 size*size 方形區(qū)域獲取區(qū)域, 默認(rèn)是 4:return: res_img 恢復(fù)后的圖片,圖像矩陣值 0-1 之間,數(shù)據(jù)類型為 np.array,數(shù)據(jù)類型對象 (dtype): np.double, 圖像形狀:(height,width,channel), 通道(channel) 順序?yàn)镽GB"""# 恢復(fù)圖片初始化,首先 copy 受損圖片,然后預(yù)測噪聲點(diǎn)的坐標(biāo)后作為返回值。res_img = np.copy(noise_img)# 獲取噪聲圖像noise_mask = get_noise_mask(noise_img)for i in range(noise_mask.shape[0]):for j in range(noise_mask.shape[1]):for k in range(noise_mask.shape[2]):if noise_mask[i,j,k] == 0:sc = 1listx = get_window_small(res_img,noise_mask,i,j,k)if len(listx) != 0:res_img[i,j,k] = listx[len(listx)//2]else:while(len(listx) == 0):listx = get_window(res_img,noise_mask,sc,i,j,k)sc = sc+1if sc > 4:res_img[i,j,k] = np.mean(listx)else:res_img[i,j,k] = listx[len(listx)//2]return res_img

    恢復(fù)效果:

    原始圖片

    添加噪點(diǎn)

    恢復(fù)后

    總結(jié)

    以上是生活随笔為你收集整理的改进的自适应中值滤波算法 去除椒盐噪声 python 代码实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。