1.需搭建的GUI界面
两个axes,一个用于导入原始图像,一个用于输出处理后的头像,并且记好他们的Tag,在代码里会用到
2.导入图片功能代码实现
给一个String为导入图片的button添加callback函数,在这里提供了多种方法
function openImg_Callback(hObject, eventdata, handles)%菜单栏导入图片的控件
% hObject handle to openImg (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% axes(handles.show_sourImg);%导入图片到框1
% image=imread('fruit.jpg');%导入flower图片
% imshow(image);
% title('yy')
%支持用户自己选定图片,任何格式的图片
%%选定axes show_sourImg
% [filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'载入图像');
% if isequal(filename,0)||isequal(pathname,0)
% errordlg('没有选中文件','出错');
% return;
% else
% file=[pathname,filename];
% end
% pic = imread(file);
% axes(handles.show_sourImg);
% imshow(pic);
% title('原始图像','color','b');
[filename,pathname]=uigetfile(...
{'*.bmp;*.jpg;*.png;*.jpeg','ImageFiles(*.bmp,*.jpg,*.png,*.jpeg)';...
'*.*','AllFiles(*.*)'},...
'Pickanimage');
axes(handles.show_sourImg);%show_sourImg是输出图像的axes的Tag,换成自己的
global fpath;%这个全局变量很重要,事关程序时候能正常运行,后续的全局变量也尽量要用这个名字
fpath=[pathname filename];
img_1=imread(fpath);
imshow(img_1);
title('原始图像');
2.高通滤波代码
给String为高通滤波的button添加如下callback函数
function pushbutton24_Callback(hObject, eventdata, handles)%高通滤波
axes(handles.show_proImg);
global fpath;
img_2=imread(fpath);
img_2=rgb2gray(img_2);
img_2=imnoise(img_2,'salt & pepper',0.06);
img_2=double(img_2);
img_2=fft2(img_2);
img_2=fftshift(img_2);[M,N,~]=size(img_2);
nn=2;
d0=50;
m=floor(M/2);n=floor(N/2);
for i=1:M
for j=1:N
d=sqrt((i-m)^2+(j-n)^2);
h=1/(1+0.414*(d0/d)^(2*nn));
result(i,j)=h*img_2(i,j);
end
endresult=ifftshift(result);
J2=ifft2(result);
J3=uint8(real(J2));
imshow(J3);
title('高通滤波图');
4.低通滤波代码
给String为低通滤波的button添加如下callback函数
function pushbutton23_Callback(hObject, eventdata, handles)%低通滤波
axes(handles.show_proImg);
global fpath;
img_2=imread(fpath);
img_2=rgb2gray(img_2);
img_2=imnoise(img_2,'salt & pepper',0.06);
img_2=double(img_2);
img_2=fft2(img_2);
img_2=fftshift(img_2);[M,N,~]=size(img_2);
nn=2;
d0=50;
m=floor(M/2);n=floor(N/2);
for i=1:M
for j=1:N
d=sqrt((i-m)^2+(j-n)^2);
h=1/(1+0.414*(d/d0)^(2*nn));
result(i,j)=h*img_2(i,j);
end
end
result=ifftshift(result);
J2=ifft2(result);
J3=uint8(real(J2));
imshow(J3);
title('低通滤波');