gusucode.com > matlab为平台的一个GUI界面的图像处理程序 > DIP.m
function varargout = DIP(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @DIP_OpeningFcn, ... 'gui_OutputFcn', @DIP_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before DIP is made visible. function DIP_OpeningFcn(hObject, eventdata, handles, varargin) % Choose default command line output for DIP handles.output = hObject; % Update handles structure guidata(hObject, handles); % --- Outputs from this function are returned to the command line. function varargout = DIP_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; %========================================================================== % CODE START HERE %========================================================================== %==========Define a useful function which is used to creat matrix=========== function out=matrix(img,dim,power) imsize=size(img); rows=imsize(1); cols=imsize(2); if dim==2; unit=ones(rows,cols); end; if dim==3; unit=ones(rows,cols,3); end; out=power*unit; % --- Executes on button press in open_file. function open_file_Callback(hObject, eventdata, handles) global actual; global last; global orignal; global map; [filename,pathname]= uigetfile( ... {'*.bmp;*.jpg;*.gif;*.tif','Image Files (*.bmp,*.jpg,*.gif,*.tif)'; '*.bmp', 'BMP-files (*.bmp)'; ... '*.jpg','JPG-files (*.jpg)'; ... '*.gif','GIF-files (*.gif)'; ... '*.tif','TIF-files (*.tif)'; ... '*.*', 'All Files (*.*)'}, ... '请选择图像文件'); file=[pathname filename]; [orignal,ap]=imread(file); actual=double(orignal); imshow(uint8(actual)); % --- Executes on button press in ShowOrign. function ShowOrign_Callback(hObject, eventdata, handles) global orignal; global actual; global last; last=actual; actual=double(orignal); imshow(uint8(actual)); % --- Executes on button press in SaveImage. function SaveImage_Callback(hObject, eventdata, handles) global actual; [filename,pathname]=... uiputfile({'*.jpg';'*.bmp';'*.gif';'*.tif'},'请选择路径'); path=[pathname filename]; imwrite(uint8(actual),path); % --- Executes on button press in ExitDIP. function ExitDIP_Callback(hObject, eventdata, handles) button = questdlg('您确定要退出本程序吗?','确定操作'); switch button case 'Yes' close(gcf); case 'No' helpdlg('欢迎您继续使用本程序!','欢迎'); end; % --- Executes on button press in ToGray. function ToGray_Callback(hObject, eventdata, handles) global actual; global last; last=actual; type=ndims(actual); if type==3 actual(:,:,1)=actual(:,:,1).*actual(:,:,1); actual(:,:,2)=actual(:,:,2).*actual(:,:,2); actual(:,:,3)=actual(:,:,3).*actual(:,:,3); temp=actual(:,:,1)+actual(:,:,2)+actual(:,:,3); actual=sqrt(temp/3); imshow(uint8(actual)); else warndlg('请注意!当前已经是灰度图!','张志强的友情提示') end; % --- Executes on button press in Brighten. function Brighten_Callback(hObject, eventdata, handles) global actual; global last; last=actual; imsize=size(actual); type=length(imsize); madd=matrix(actual,type,10); actual=actual+madd; imshow(uint8(actual)); % --- Executes on button press in dark. function dark_Callback(hObject, eventdata, handles) global actual; global last; last=actual; type=ndims(actual); madd=matrix(actual,type,10); actual=actual-madd; imshow(uint8(actual)); % --- Executes on button press in duibiup. function duibiup_Callback(hObject, eventdata, handles) global actual; global last; last=actual; actual=0.5*actual.^1.13; imshow(uint8(actual)); % --- Executes on button press in duibiDown. function duibiDown_Callback(hObject, eventdata, handles) global actual; global last; last=actual; actual=1.8467*actual.^0.885; imshow(uint8(actual)); % --- Executes on button press in Redup. function Redup_Callback(hObject, eventdata, handles) global actual; global last; last=actual; type=ndims(actual); if type==3 madd=matrix(actual,2,10); actual(:,:,1)=actual(:,:,1)+madd; else warndlg('操作有误!当前图像不是RGB图,无法处理!','张志强的友情提示') end imshow(uint8(actual)); % --- Executes on button press in RedDown. function RedDown_Callback(hObject, eventdata, handles) global actual; global last; last=actual; type=ndims(actual); if type==3 madd=matrix(actual,2,10); actual(:,:,1)=actual(:,:,1)-madd; else warndlg('操作有误!当前图像不是RGB图,无法处理!','张志强的友情提示') end imshow(uint8(actual)); % --- Executes on button press in GreenUp. function GreenUp_Callback(hObject, eventdata, handles) global actual; global last; last=actual; type=ndims(actual); if type==3 madd=matrix(actual,2,10); actual(:,:,2)=actual(:,:,2)+madd; else warndlg('操作有误!当前图像不是RGB图,无法处理!','张志强的友情提示') end imshow(uint8(actual)); % --- Executes on button press in GreenDown. function GreenDown_Callback(hObject, eventdata, handles) global actual; global last; last=actual; type=ndims(actual); if type==3 madd=matrix(actual,2,10); actual(:,:,2)=actual(:,:,2)-madd; else warndlg('操作有误!当前图像不是RGB图,无法处理!','张志强的友情提示') end imshow(uint8(actual)); % --- Executes on button press in BlueUp. function BlueUp_Callback(hObject, eventdata, handles) global actual; global last; last=actual; type=ndims(actual); if type==3 madd=matrix(actual,2,10); actual(:,:,3)=actual(:,:,3)+madd; else warndlg('操作有误!当前图像不是RGB图,无法处理!','张志强的友情提示') end imshow(uint8(actual)); % --- Executes on button press in BlueDown. function BlueDown_Callback(hObject, eventdata, handles) global actual; global last; last=actual; type=ndims(actual); if type==3 madd=matrix(actual,2,10); actual(:,:,3)=actual(:,:,3)-madd; else warndlg('操作有误!当前图像不是RGB图,无法处理!','张志强的友情提示') end imshow(uint8(actual)); % -------------------------------------------------------------------- function Undo_Callback(hObject, eventdata, handles) global actual; global last; global last2; last2=actual; actual=last; imshow(uint8(actual)); % -------------------------------------------------------------------- function Redo_Callback(hObject, eventdata, handles) global actual; global last2; actual=last2; imshow(uint8(actual)); % --- Executes on button press in RChannle. function RChannle_Callback(hObject, eventdata, handles) global actual; type=ndims(actual); if type==3 channle=uint8(actual); channle(:,:,2)=0; channle(:,:,3)=0; imshow(channle) else warndlg('操作有误!当前图像不是RGB图!','张志强的友情提示') end; % --- Executes on button press in GChannle. function GChannle_Callback(hObject, eventdata, handles) global actual; type=ndims(actual); if type==3 channle=uint8(actual); channle(:,:,1)=0; channle(:,:,3)=0; imshow(channle) else warndlg('操作有误!当前图像不是RGB图!','张志强的友情提示') end; % --- Executes on button press in BChannle. function BChannle_Callback(hObject, eventdata, handles) global actual; type=ndims(actual); if type==3 channle=uint8(actual); channle(:,:,1)=0; channle(:,:,2)=0; imshow(channle) else warndlg('操作有误!当前图像不是RGB图!','张志强的友情提示') end; % --- Executes on button press in Rotate. function Rotate_Callback(hObject, eventdata, handles) global actual; global angle; actual=imrotate(uint8(actual),angle); imshow(actual); actual=double(actual); function angle_Callback(hObject, eventdata, handles) global angle; angle=str2double(get(hObject,'String')); % --- Executes during object creation, after setting all properties. function angle_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in MedianFilter. function imhist_Callback(hObject, eventdata, handles) % hObject handle to MedianFilter (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global actual; global last; type=ndims(actual); if type==3 g(:,:,1)=actual(:,:,1).*actual(:,:,1); g(:,:,2)=actual(:,:,2).*actual(:,:,2); g(:,:,3)=actual(:,:,3).*actual(:,:,3); g=g(:,:,1)+g(:,:,2)+g(:,:,3); g=sqrt(g/3); figure,imhist(uint8(g)); else figure,imhist(uint8(actual)); end; % --- Executes on button press in JT. function JT_Callback(hObject, eventdata, handles) % hObject handle to JT (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global actual; global last; last=actual; actual=imcrop(actual,[200 145 200 200]); imshow(uint8(actual)); % --- Executes on button press in Modify. function Modify_Callback(hObject, eventdata, handles) global actual; global last; global width; global high; last=actual; actual=imresize(actual,[high,width]); imshow(uint8(actual)); function width_Callback(hObject, eventdata, handles) global width; width=str2double(get(hObject,'String')); % --- Executes during object creation, after setting all properties. function width_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function high_Callback(hObject, eventdata, handles) global high; high=str2double(get(hObject,'String')); % --- Executes during object creation, after setting all properties. function high_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in Readme. function Readme_Callback(hObject, eventdata, handles) % hObject handle to Readme (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) helpdlg('作者:张志强 指导老师:廖红华 [2008-5-30]','相关说明') % --- Executes on selection change in AddNoise. function AddNoise_Callback(hObject, eventdata, handles) global actual; global last; last=actual; actual=uint8(actual); switch get(hObject,'Value'); case 1 actual=imnoise(actual,'salt & pepper'); case 2 actual=imnoise(actual,'gaussian'); case 3 actual=imnoise(actual,'speckle'); end; imshow(actual); actual=double(actual); % --- Executes during object creation, after setting all properties. function AddNoise_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in MedianFilter. function MedianFilter_Callback(hObject, eventdata, handles) global actual; global last; last=actual; actual=uint8(actual); if ndims(actual)==3 actual(:,:,1)=medfilt2(actual(:,:,1),[3 3]); actual(:,:,2)=medfilt2(actual(:,:,2),[3 3]); actual(:,:,3)=medfilt2(actual(:,:,3),[3 3]); else actual=medfilt2(actual,[3 3]); end; imshow(actual); actual=double(actual); % --- Executes on button press in Edgen. function Edgen_Callback(hObject, eventdata, handles) global actual; temp=uint8(actual); if ndims(actual)==3 temp=rgb2gray(temp); end; if ndims(temp)==2 switch get(hObject,'Value'); case 1 temp=edge(temp,'sobel'); case 2 temp=edge(temp,'roberts'); case 3 temp=edge(temp,'log'); case 4 temp=edge(temp,'zerocross'); case 5 temp=edge(temp,'canny'); end; end; imshow(temp); % --- Executes on button press in FFT. function FFT_Callback(hObject, eventdata, handles) % hObject handle to FFT (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global actual; imfft=fftn(actual); imshow(uint8(real(imfft))); % --- Executes on button press in Inverse. function Inverse_Callback(hObject, eventdata, handles) % hObject handle to Inverse (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global actual; global last; last=actual; type=ndims(actual); max=matrix(actual,type,255); actual=max-actual; imshow(uint8(actual)); % --- Executes on button press in DCX. function DCX_Callback(hObject, eventdata, handles) % hObject handle to DCX (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global actual; last=actual; imsize=size(actual); if ndims(actual)==2 for i=1:imsize(1) temp(i,:)=actual(imsize(1)+1-i,:); end; else for i=1:imsize(1) temp(i,:,:)=actual(imsize(1)+1-i,:,:); end; end; actual=temp; imshow(uint8(actual)); % --- Executes on button press in DCY. function DCY_Callback(hObject, eventdata, handles) % hObject handle to DCY (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global actual; last=actual; imsize=size(actual); if ndims(actual)==2 for j=1:imsize(2) temp(:,j)=actual(:,imsize(2)+1-j); end; else for j=1:imsize(2) temp(:,j,:)=actual(:,imsize(2)+1-j,:); end; end; actual=temp; imshow(uint8(actual)); % --- Executes on button press in BlackWhite. function BlackWhite_Callback(hObject, eventdata, handles) % hObject handle to BlackWhite (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global actual; imgsize=size(actual); if ndims(actual)==3 warndlg('请先转换为灰度图!','警告'); else for i=1:imgsize(1) for j=1:imgsize(2) if actual(i,j)>128 actual(i,j)=255; else actual(i,j)=0; end; end; end; end; imshow(uint8(actual)); % --- Executes on button press in IFFTN. function IFFTN_Callback(hObject, eventdata, handles) % hObject handle to IFFTN (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global actual; global last; last=actual; imfft=fftn(actual); res=real(ifftn(imfft)); imshow(uint8(res)); % --- Executes on button press in DJFiles. function DJFiles_Callback(hObject, eventdata, handles) global actual; global img2; global sign_dj; sign_dj=1; [filename,pathname]= uigetfile( ... {'*.bmp;*.jpg;*.gif;*.tif','Image Files (*.bmp,*.jpg,*.gif,*.tif)'; '*.bmp', 'BMP-files (*.bmp)'; ... '*.jpg','JPG-files (*.jpg)'; ... '*.gif','GIF-files (*.gif)'; ... '*.tif','TIF-files (*.tif)'; ... '*.*', 'All Files (*.*)'}, ... '请选择将要叠加的另一个图像文件'); file=[pathname filename]; img2=double(imread(file)); imsize2=size(img2); imsize1=size(actual); switch ndims(actual) case 2 if ndims(img2)==3 button=questdlg('注意,待叠加的图像是RGB图,转换为灰度图像?','确定操作'); if button=='Yes' img2=double(rgb2gray(uint8(img2))); else warndlg('无法继续叠加!','警告'); sign_dj=0; end; end; if ndims(img2)==ndims(actual) if isequal(imsize1,imsize2)==0; button = questdlg('注意,待叠加的图像尺寸与原图像不符,自动调节此图像?','确定操作'); if button == 'Yes' img2=imresize(img2,[imsize1(1),imsize1(2)]); end; else warndlg('无法继续叠加!','警告'); sign_dj=0; end; end; case 3 if ndims(img2)==2 button=questdlg('注意,待叠加的图像是灰度图,将原图像转换为灰度图像?','确定操作'); if button=='Yes' actual=double(rgb2gray(uint8(img2))); else warndlg('无法继续叠加!','警告'); sign_dj=0; end; end; if ndims(actual)==ndims(img2) if isequal(imsize1,imsize2)==0; button = questdlg('注意,待叠加的图像尺寸与原图像不符,自动调节此图像?','确定操作'); if button == 'Yes' img2=imresize(img2,[imsize1(1),imsize1(2)]); else warndlg('无法继续叠加!','警告'); sign_dj=0; end; end; end; end; % --- Executes on slider movement. function DJBL_Slider_Callback(hObject, eventdata, handles) global sign_dj; global actual; global img2; if sign_dj==1 djbl=get(hObject,'Value'); img=djbl*img2+(1-djbl)*actual; imshow(uint8(img)); else warndlg('请先点图像叠加按钮,选择要叠加的图像文件后再调节比例!','警告'); end; % --- Executes during object creation, after setting all properties. function DJBL_Slider_CreateFcn(hObject, eventdata, handles) if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end % --- Executes during object creation, after setting all properties. function Edgen_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in Wiener. function Wiener_Callback(hObject, eventdata, handles) global actual; global last; last=actual; actual=uint8(actual); if ndims(actual)==3 actual(:,:,1)=wiener2(actual(:,:,1), [5 5]); actual(:,:,2)=wiener2(actual(:,:,2), [5 5]); actual(:,:,3)=wiener2(actual(:,:,3), [5 5]); else actual=wiener2(actual, [5 5]); end; imshow(actual); actual=double(actual); % --- Executes on button press in erode. function erode_Callback(hObject, eventdata, handles) % hObject handle to erode (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global actual; global last; last=actual; actual=uint8(actual); SE = strel('ball',3,3); actual = imerode(actual,SE); imshow(actual); actual=double(actual); % --- Executes on button press in dilate. function dilate_Callback(hObject, eventdata, handles) % hObject handle to dilate (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global actual; global last; last=actual; actual=uint8(actual); SE = strel('ball',3,3); actual = imdilate(actual,SE); imshow(actual); actual=double(actual); % --- Executes on button press in JHH. function JHH_Callback(hObject, eventdata, handles) global actual; global last; last=actual; actual=uint8(actual); if ndims(actual)==2 actual=histeq(actual); else warndlg('请先转换为灰度图!','警告'); end; imshow(actual); actual=double(actual); % --- Executes on button press in YM. function YM_Callback(hObject, eventdata, handles) global actual; global last; last=actual; if ndims(actual)==2 M=[1 1 1;1 1 1;1 1 1]/9; J2=filter2(M,actual); actual=actual-J2; imshow(actual); else M=[1 1 1;1 1 1;1 1 1]/9; J2(:,:,1)=filter2(M,actual(:,:,1)); J2(:,:,2)=filter2(M,actual(:,:,2)); J2(:,:,3)=filter2(M,actual(:,:,3)); actual(:,:,1)=actual(:,:,1)-J2(:,:,1); actual(:,:,2)=actual(:,:,2)-J2(:,:,2); actual(:,:,3)=actual(:,:,3)-J2(:,:,3); imshow(actual); end; function offset_X_Callback(hObject, eventdata, handles) global offset_x; offset_x=str2double(get(hObject,'String')); offset_x=double(int8(offset_x)); % --- Executes during object creation, after setting all properties. function offset_X_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function offset_Y_Callback(hObject, eventdata, handles) global offset_y; offset_y=str2double(get(hObject,'String')); offset_y=double(int8(offset_y)); % --- Executes during object creation, after setting all properties. function offset_Y_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in Xmove. function Xmove_Callback(hObject, eventdata, handles) global offset_x; global actual; global last; last=actual; imsize=size(actual); if ndims(actual)==3 if offset_x>0 for i=(imsize(2)-offset_x):-1:1 actual(:,i+offset_x,:)=actual(:,i,:); end; for i=1:1+offset_x actual(:,i,:)=0; end; else for i=1:imsize(2)+offset_x actual(:,i,:)=actual(:,i-offset_x,:); end; for i=(imsize(2)+offset_x):imsize(2) actual(:,i,:)=0; end; end; else if offset_x>0 for i=(imsize(2)-offset_x):-1:1 actual(:,i+offset_x)=actual(:,i); end; for i=1:1+offset_x actual(:,i)=0; end; else for i=1:imsize(2)+offset_x actual(:,i)=actual(:,i-offset_x); end; for i=imsize(2)+offset_x:imsize(2) actual(:,i)=0; end; end; end imshow(uint8(actual)); % --- Executes on button press in Ymove. function Ymove_Callback(hObject, eventdata, handles) global offset_y; global actual; global last; last=actual; imsize=size(actual); if ndims(actual)==3 if offset_y>0 for i=(imsize(1)-offset_y):-1:1 actual(i+offset_y,:,:)=actual(i,:,:); end; for i=1:1+offset_y actual(i,:,:)=0; end; else for i=1:(imsize(1)+offset_y) actual(i,:,:)=actual(i-offset_y,:,:); end; for i=imsize(1)+offset_y:imsize(1) actual(i,:,:)=0; end; end; else if offset_y>0 for i=(imsize(1)-offset_y):-1:1 actual(i+offset_y,:)=actual(i,:); end; for i=1:1+offset_y actual(i,:)=0; end; else for i=1:(imsize(1)+offset_y) actual(i,:)=actual(i-offset_y,:); end; for i=(imsize(1)+offset_y):imsize(1) actual(i,:)=0; end; end; end imshow(uint8(actual));