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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab 自写 自适应中值滤波 matlab自适应中值滤波算法

發布時間:2024/8/1 循环神经网络 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab 自写 自适应中值滤波 matlab自适应中值滤波算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、自適應中值濾波(代碼)

function aOut = stPlus(aIn,f1,f2,st,stMax) %這僅僅是 AdaMedFilter (自適應中值濾波函數) 的子函數 %這僅僅是一個附屬函數/功能片段(有特定的功能,輸入若干邊界條件,輸出一個具體的數值) %輸入aIn,需要濾波的圖像,循環到的行數f1和列數f2,掩模版大小st,和掩模版最大值stMax[ra,ca] = size(aIn); %制作出掩模版 sxy = aIn(f1-round(st/2)+1:f1+round(st/2)-1,f2-round(st/2)+1:f2+round(st/2)-1); %將掩模版從小到大排序并輸出為一列 zSort = sort(sxy(:)); %基于排序后的zSort找到最大值,最小值,中值,以及循環位置的值 med = floor(st*st/2)+1; zMax = zSort(st*st); zMin = zSort(1); zMed = zSort(med); zxy = sxy(floor(st/2)+1,floor(st/2)+1); %判斷中值是否在最大值和最小值之間 delta1 = zMed-zMin; delta2 = zMax-zMed; if (delta1 * delta2) > 0%判斷循環位置的值是否在最大值和最小值之間delta3 = zxy - zMin;delta4 = zMax - zxy;if (delta3 * delta4) > 0%中值 在 最大最小值之間,且循環位置的值 在 最大最小值之間aOut = zxy;else%中值 在 最大最小值之間,但循環位置的值 不在 最大最小值之間aOut = zMed;end end if (delta1 * delta2) <= 0 %中值 不在 最大最小值之間if st < stMax%掩模版尺寸 不是 最大if f1 >= floor((st+2)/2)+1 && f2 >= floor((st+2)/2)+1 && f1 <= ra-floor((st+2)/2) && f2 <= ca-floor((st+2)/2)%該循環位置是否還可以進行st+2的循環aOut = Inf;%可以elseaOut = zMed;%不可以,直接輸出endelse%掩模版尺寸 是 最大,直接輸出aOut = zMed;end end end function aOut = AdaMedFilter(aIn,static,stMax) %這僅僅是一個 自適應 中值濾波函數 %輸入aIn圖像,輸出aOut結果 %static是人為定制的靜態變量,意義是sxy掩模版的大小,默認為3*3,stMax就是掩模版最大的大小,默認為7*7%輸入參數的默認及處理 if nargin == 1static = 3;stMax = 7; elseif nargin == 2stMax = 7; end%定義輸入及輸出圖像 %aIn是最先輸入圖像 %atemp是對輸入圖像的初步處理(比如歸一化,雙精度化,歸255化等),可以在后面調用時靈活更改 %aOut是最終輸出圖像 atemp = aIn; [ra,ca] = size(aIn); aOut = zeros(ra,ca);%定義st = 3,其中static為人為定義的靜態變量,所以 st = static;%循環,每次循環把循環位置的值給進去,輸出一個唯一的有效值賦值給aOut在當前位置的值 for f1 = round(st/2):ra-round(st/2)+1for f2 = round(st/2):ca-round(st/2)+1%st = static在每一個循環的循環開始和循環結束都有,是為了絕對保證st在每次循環開始和末尾都是絕對為3st = static;%輸入循環位置的值,輸出處理后的值,當然,有可能st = 3的中值濾波不夠,那么就會輸出temp = Inftemp = stPlus(atemp,f1,f2,st,stMax);%我已經在函數stPlus中確定當temp = Inf時,一定能夠被st+2的中值濾波處理,所以我就循環讓st增大取得有效的tempwhile(temp == Inf)st = st+2;temp = stPlus(atemp,f1,f2,st,stMax);end%每一個循環最重要給我一個唯一的正確值temp,我把它賦值給循環所在位置的aOut!aOut(f1,f2) = temp;%st = static在每一個循環的循環開始和循環結束都有,是為了絕對保證st在每次循環開始和末尾都是絕對為3st = static;end end end clear close all aIn = imread("GaosiFilter.jpg"); static = [3,7,11]; stMax = 11;%取不同的st值(掩模版大小)進行濾波 a1 = AdaMedFilter(aIn,static(1),stMax); a2 = AdaMedFilter(aIn,static(2),stMax); a3 = AdaMedFilter(aIn,static(3),stMax);%對濾波后圖片a1進行均值濾波以消除圖片輪廓的“毛刺” a1Ave = AverageFilter(a1,5); figure,imshow(a1Ave,[])%反復進行濾波3次 a12 = AdaMedFilter(a1,static(1),stMax); a13 = AdaMedFilter(a12,static(1),stMax); a14 = AdaMedFilter(a13,static(1),stMax); a15 = AdaMedFilter(a14,static(1),stMax);figure,imshow(aIn,[]) figure,imshow(a1,[]) figure,imshow(a2,[]) figure,imshow(a3,[])figure,imshow(a1,[]) figure,imshow(a12,[]) figure,imshow(a13,[]) figure,imshow(a14,[]) figure,imshow(a15,[])%對比1次濾波和5次濾波的剖線差別 figure,hold on; plot(a1(220,:),'r') plot(a15(220,:),'b')

二、自適應中值濾波(圖片)

1、輸入的噪聲圖像

2、當st = 3,stmax = 11時輸出的濾波后圖像

3、分析

中值濾波對胡椒噪聲和鹽噪聲濾波效果特別好,但是自適應保邊中值濾波會讓濾波后圖片的邊緣出現“毛刺”,這個時候我們可以采用均值濾波,以圖片稍微變模糊一些的代價將邊緣的毛刺消除,如下圖:

三、st的不同對濾波效果的影響

1、st = 3

2、st = 7

3、st = 11

4、結論

? 隨著st(掩模版大小)的增大,濾波效果并沒有變得更好,甚至會讓原本清晰的圖片邊緣變得更模糊。

四、探究對圖像重復進行濾波多次對濾波效果的影響

1、濾波一次圖片

2、濾波五次圖片

3、對比一次濾波的剖線和五次濾波的剖線

說明:

藍色線條是“5次濾波”圖片的剖線;紅色線條是“1次濾波”圖片的剖線

4、結論

? 從圖片上看,一次濾波和五次濾波效果差別不大,但是從剖線上看,很明顯的感知到,對于圖片平滑部位,一次濾波和五次濾波效果相差無幾,但是對于圖像急劇變化的部分,很明顯的是五次濾波后的圖像線條更加的平滑,變化更加均勻!

總結

以上是生活随笔為你收集整理的matlab 自写 自适应中值滤波 matlab自适应中值滤波算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。