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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MATLAB图像的频域低通滤波(灰度图像滤波+彩色图像滤波)

發布時間:2024/1/8 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MATLAB图像的频域低通滤波(灰度图像滤波+彩色图像滤波) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數字圖像處理完整MATLAB代碼在我的資源可以看到,為方便下載,下面是百度網盤資源:

鏈接:https://pan.baidu.com/s/17S7PZJwwvb3PFMFVxqEY5w?
提取碼:HUAT

濾波代碼:

function l_f = low_filter(img,fre) %此函數用于對圖像進行濾波 %主要原理為在圖像平移后頻譜圖進行圈定范圍(面積)操作,面積外的設為0(濾除高頻成分) %img為圖像平移后頻譜圖,fre為圈定的頻譜范圍 [a,b] = size(img); a0 = round(a/2); b0 = round(b/2); for i=1:afor j=1:bdistance = (i-a0)^2+(j-b0)^2;if distance<freh = 1;elseh = 0;endl_f(i,j) = h*img(i,j);end endend

一、灰度圖像濾波

具體處理過程如下:

1.Imread函數讀取圖像數據

2.RGB圖像轉換為灰度二維圖

3.調用fft2函數對灰度二維圖像進行DFT處理

4.調用abs函數取得頻譜采用log處理,進行灰度壓縮

5.調用fftshift函數中心化處理

6.利用理想低通濾波器low_filter(現有多種低通濾波器,自己可以進行選擇設計)對圖像頻譜進行濾波,濾除高頻成分

? ? ? ?在我看來,?這里的低通濾波器設計原理其實很簡單,就是在步驟5處理后,圖像頻譜圖的分布規律為:圖像的低頻信息位于圖像頻譜圖的中心,自圖像頻譜圖中心向外延申,圖像所包含的信息的頻率越高(而噪聲的頻率也很高),這也就可以通過保留靠近頻譜圖中心的部分(圖像包含的低頻信息),舍去遠離頻譜圖中心的部分(高頻噪聲),濾除圖像中的噪聲。下面是圓形低通濾波器的代碼,以及濾波前后的圖像頻譜圖。

? ? ? ? ? ? ? ? ? ? ?

? ? ? ??

(1).步驟5處理后的圖像頻譜圖? ? ? ? ? ?(2).理想低通濾波器low_filter濾除高頻后的圖像頻譜圖

7.調用ifftshift函數去中心化處理

8.對輸出結果ifft2反變化得到濾波后的圖像

下面是濾波的過程結果,左側滑塊功能為調節低通濾波器的濾波范圍。

global My_GUI_handles; fre=get(hObject,'Value'); set(handles.text_l_f1,'String',num2str(fre));axes(My_GUI_handles.axes_dst); img_src=getimage(My_GUI_handles.axes_src); img_src=rgb2gray(img_src);%轉換為灰度二維 img_src1=double(img_src); %數據類型轉換 % % img_src2=fft2(img_src1);%快速傅里葉變換 % % img_src3=fftshift(img_src2);%頻譜平移 % % img_src4=abs(img_src3);%計算I的幅度譜img_src2=abs(fftshift(fft2(img_src1))); imshow(log(img_src2),[]); title('圖像傅里葉變換取對數所得頻譜');axes(My_GUI_handles.axes_src1); [a,b] = size(img_src1); s_max = min(a/2,b/2); s_max = s_max^2; set(handles.slider_l_f1,'Max',double(s_max));img_src5= low_filter(fftshift(fft2(img_src1)),fre); imshow(log(abs(img_src5)),[]); title('低通濾波頻譜');axes(My_GUI_handles.axes_dst1); new_img = uint8(real(ifft2(ifftshift(img_src5)))); imshow(new_img,[]); title('低通濾波后的圖像');set(handles.slider_l_f2,'Enable','off');

二、彩色圖像(RGB)濾波

? ? ? ?我們知道一般對于RGB圖像頻域濾波都需要先轉換成灰度二維圖,才能進行頻域低通濾波,這也導致最終顯示的圖像也只能是灰度圖。分析其原因可知,這是由于我們對于圖像處理需要用到fft2等函數造成的。那么如何才能對RGB圖像進行頻域濾波后,讓它顯示為RGB圖像呢?在參考了網上一篇北京交通大學王瀟的《利用MATLAB對彩色圖像進行低通濾波》的文章后,得知可以對圖像的R、G、B圖像分別進行上述濾波后,再將R、G、B濾波后的圖合成一張顯示出來,以此達到對RGB圖像進行頻域濾波后依然可以顯示濾波后的RGB圖像。具體過程如下。

1.Imread函數讀取圖像

2.將RGB圖像拆分為R、G、B三張單色圖

3.調用fft2函數對R、G、B單色圖分別進行進行DFT處理

4.調用abs函數取得頻譜采用log處理,進行灰度壓縮

5.調用fftshift函數中心化處理

6.利用理想低通濾波器low_filter對圖像頻譜進行濾波,濾除高頻成分

7.調用ifftshift函數去中心化處理

8.對輸出結果ifft2反變化得到濾波后的R、G、B圖像

9.將分別處理后的R、G、B圖像合成為一幅圖像,然后進行顯示,得到頻域濾波后的RGB圖像

下面是濾波的過程結果,第一行第二列和第二行第一列分別為:R單色圖濾波后的頻譜圖、G單色圖濾波后的頻譜圖。左側滑塊功能為調節低通濾波器的濾波范圍。

global My_GUI_handles; fre=get(hObject,'Value'); set(handles.text_l_f2,'String',num2str(fre));axes(My_GUI_handles.axes_dst); img_src=getimage(My_GUI_handles.axes_src); [a,b] = size(img_src); s_max = min(a/2,b/2); s_max = s_max^2; set(handles.slider_l_f2,'Max',double(s_max));for i=1:3A=img_src(:,:,i);B=double(A);C= low_filter(fftshift(fft2(B)),fre);D = uint8(real(ifft2(ifftshift(C))));img_src(:,:,i)=D; end img_src_R= low_filter(fftshift(fft2(double(img_src(:,:,1)))),fre); imshow(log(abs(img_src_R)),[]); axes(My_GUI_handles.axes_src1); img_src_G= low_filter(fftshift(fft2(double(img_src(:,:,2)))),fre); imshow(log(abs(img_src_G)),[]); axes(My_GUI_handles.axes_dst1); imshow(img_src); set(handles.slider_l_f1,'Enable','off');

總結

以上是生活随笔為你收集整理的MATLAB图像的频域低通滤波(灰度图像滤波+彩色图像滤波)的全部內容,希望文章能夠幫你解決所遇到的問題。

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