数字图像处理MATLAB函数源代码MATLAB函数源代码function varargout = DIP(varargin)% DIP MATLAB code for DIP.fig% DIP, by itself, creates a new DIP or raises the existing % singleton*.%% Edit the above text to modify the response to help DIP % Last Modified by GUIDE v2.5 27-May-2012 11:43:05 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}); endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State,varargin{:});elsegui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT% --- Executes just before DIP is made visible. functionDIP_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to DIP (see VARARGIN)% Choose default command line output for DIPhandles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes DIP wait for user response (see UIRESUME) %uiwait(handles.DIP);set(handles.Menu2,'Enable','off');% 在打开图片前其他下拉菜单不可用set(handles.Menu3,'Enable','off');set(handles.Menu4,'Enable','off');set(handles.Menu5,'Enable','off');set(handles.Menu6,'Enable','off');set(handles.Menu7,'Enable','off');set(handles.Menu8,'Enable','off');set(handles.Menu9,'Enable','off');setappdata(handles.DIP, 'IM', 0);% --- Outputs from this function are returned to the command line. function varargout = DIP_OutputFcn(hObject, eventdata, handles) %varargout cell array for returning output args (see VARARGOUT); %hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output;% --- Executes on button press in file_open.function file_open_Callback(hObject, eventdata, handles) % hObject handle to file_open (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM %定义一个全局变量im[filename,pathname]=uigetfile({'*.bmp';'*.tif';'*.png';'*.jpg'},'select picture');%选择图片路径if isequal(filename,0) || isequal(pathname,0),return;endstr=[pathname filename]; %合成路径+文件名IM=imread(str); %读取图片axes(handles.axes1); %使用第一个axesimshow(IM); %显示图片%axes(handles.axes2);%cla reset;set(handles.Menu2,'Enable','on');% 在打开图片后其他下拉菜单可用set(handles.Menu3,'Enable','on');set(handles.Menu4,'Enable','on');set(handles.Menu5,'Enable','on');set(handles.Menu6,'Enable','on');set(handles.Menu7,'Enable','on');set(handles.Menu8,'Enable','on');set(handles.Menu9,'Enable','on');setappdata(handles.DIP, 'IM', IM);%--------------------------------------------------------------------function Menu1_Callback(hObject, eventdata, handles) % hObject handle to Menu1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) %--------------------------------------------------------------------function Menu1_1_Callback(hObject, eventdata, handles) % hObject handle to Menu1_1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)global IM %定义一个全局变量IM[filename,pathname]=uigetfile({'*.bmp';'*.tif';'*.png';'*.jpg'},'sel ect picture'); %选择图片路径if isequal(filename,0) || isequal(pathname,0),return;endstr=[pathname filename]; %合成路径+文件名IM=imread(str); %读取图片axes(handles.axes1); %使用第一个axesimshow(IM); %显示图片%axes(handles.axes2);%cla reset;set(handles.Menu2,'Enable','on');% 在打开图片后其他下拉菜单可用set(handles.Menu3,'Enable','on');set(handles.Menu4,'Enable','on');set(handles.Menu5,'Enable','on');set(handles.Menu6,'Enable','on');set(handles.Menu7,'Enable','on');set(handles.Menu8,'Enable','on');set(handles.Menu9,'Enable','on');setappdata(handles.DIP, 'IM', IM);%--------------------------------------------------------------------function Menu1_2_Callback(hObject, eventdata, handles) % hObject handle to Menu1_2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global BW %定义处理后的图片BW这个全局变量[filename,pathname,filterindex]=...uiputfile({'*.bmp';'*.tif';'*.png';'*.jpg'},'save picture');%存储图片路径if filterindex==0return %如果取消操作,返回elsestr=[pathname filename]; %合成路径+文件名axes(handles.axes2); %使用第二个axes imwrite(BW,str); %写入图片信息,即保存图片end%--------------------------------------------------------------------function Menu1_3_Callback(hObject, eventdata, handles) % hObject handle to Menu1_3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) close(gcf) %关闭当前Figure窗口句柄%--------------------------------------------------------------------function Menu1_4_Callback(hObject, eventdata, handles) % hObject handle to Menu1_4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;axes(handles.axes2);imshow(IM);[filename,pathname,filterindex]=...uiputfile({'*.bmp';'*.tif';'*.png';'*.jpg'},'save picture');if filterindex==0returnelsestr=[pathname filename];axes(handles.axes2);imwrite(IM,str); %写入图片信息,即保存图片end%--------------------------------------------------------------------function Menu2_Callback(hObject, eventdata, handles) % hObject handle to Menu4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)%--------------------------------------------------------------------function Menu2_1_Callback(hObject, eventdata, handles) % hObject handle to Menu2_1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) %--------------------------------------------------------------------function Menu2_1_1_Callback(hObject, eventdata, handles) % hObject handle to Menu2_1_1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;BW=imresize(IM,0.3,'nearest');axes(handles.axes2);imshow(BW,[]);%--------------------------------------------------------------------function Menu2_1_2_Callback(hObject, eventdata, handles) % hObject handle to Menu2_1_2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;BW=imresize(IM,0.1,'bilinear');axes(handles.axes2);imshow(BW,[]);%--------------------------------------------------------------------function Menu2_1_3_Callback(hObject, eventdata, handles) % hObject handle to Menu2_1_3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;BW=imresize(IM,0.1,'bicubic');axes(handles.axes2);imshow(BW,[]);%--------------------------------------------------------------------function Menu2_2_Callback(hObject, eventdata, handles) % hObject handle to Menu2_2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;H=rotate;%--------------------------------------------------------------------function Menu2_3_Callback(hObject, eventdata, handles) % hObject handle to Menu2_3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;set(handles.main_txt, 'FontName', '宋体' );set(handles.main_txt, 'String', '请选择要裁剪的局域,并双击选定区域以显示~');waitforbuttonpress;BW=imcrop(IM);axes(handles.axes2);imshow(BW);set(handles.main_txt, 'FontName', 'Calibri');set(handles.main_txt, 'String', 'Welcome!');%--------------------------------------------------------------------function Menu2_4_Callback(hObject, eventdata, handles) % hObject handle to Menu2_4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) %--------------------------------------------------------------------function Menu2_4_1_Callback(hObject, eventdata, handles) % hObject handle to Menu2_4_1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;snoise = 0.15*randn(size(IM));BW = imadd(IM, im2uint8(snoise));axes(handles.axes2);imshow(BW);%--------------------------------------------------------------------function Menu2_4_2_Callback(hObject, eventdata, handles) % hObject handle to Menu2_4_2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;BW = imnoise(IM,'salt & pepper',0.05);axes(handles.axes2);imshow(BW);%--------------------------------------------------------------------function Menu2_5_Callback(hObject, eventdata, handles) % hObject handle to Menu2_5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;len = 25;theta = 35;PSF = fspecial('motion', len, theta);BW = imfilter(IM, PSF, 'circular', 'conv');axes(handles.axes2);imshow(BW);%--------------------------------------------------------------------function Menu2_6_Callback(hObject, eventdata, handles) % hObject handle to Menu2_6 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)set(handles.main_txt, 'FontName', '宋体' );set(handles.main_txt, 'String', '请用鼠标选择任意几个像素点后按回车以显示所选像素点的数据值~');vals=impixel;set(handles.main_txt, 'FontName', 'Calibri');set(handles.main_txt, 'String', 'Welcome!');%--------------------------------------------------------------------function Menu2_7_Callback(hObject, eventdata, handles) % hObject handle to Menu2_7 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)set(handles.main_txt, 'FontName', '宋体' );set(handles.main_txt, 'String', '请用鼠标选择一线段后按回车以显示轨迹强度图~');axes(handles.axes1);improfile;%c = improfile;%axes(handles.axes2);%imshow(c);set(handles.main_txt, 'FontName', 'Calibri');set(handles.main_txt, 'String', 'Welcome!');%--------------------------------------------------------------------function Menu2_8_Callback(hObject, eventdata, handles) % hObject handle to Menu2_8 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;[counts,x]=imhist(IM,64);axes(handles.axes2);stem(x,counts,'k-','k.');%--------------------------------------------------------------------function Menu4_Callback(hObject, eventdata, handles) % hObject handle to Menu4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) %--------------------------------------------------------------------function Menu4_1_Callback(hObject, eventdata, handles) % hObject handle to Menu4_1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;BW = imadjust(IM);axes(handles.axes2);imshow(BW);%--------------------------------------------------------------------function Menu4_2_Callback(hObject, eventdata, handles) % hObject handle to Menu4_2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) %--------------------------------------------------------------------function Menu4_2_1_Callback(hObject, eventdata, handles) % hObject handle to Menu4_2_1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;BW = histeq(IM);axes(handles.axes2);imshow(BW);figure(1);subplot(1,2,1);imhist(IM);title('原始图像直方图');subplot(1,2,2);imhist(BW); title('直方图均衡化后图像直方图');%--------------------------------------------------------------------function Menu4_2_2_Callback(hObject, eventdata, handles) % hObject handle to Menu4_2_2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;hgram = ones(1,256);BW = histeq(IM,hgram);axes(handles.axes2);imshow(BW);figure(2);subplot(1,2,1);imhist(IM);title('原始图像直方图');subplot(1,2,2);imhist(BW); title('直方图规定化后图像直方图');%--------------------------------------------------------------------function Menu4_3_Callback(hObject, eventdata, handles) % hObject handle to Menu4_3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) %--------------------------------------------------------------------function Menu4_3_1_Callback(hObject, eventdata, handles) % hObject handle to Menu4_3_1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;h = [1 1 1;1 0 1;1 1 1];% 8邻域平均滤波h = h/8;BW = conv2(IM, h);axes(handles.axes2);imshow(BW);%--------------------------------------------------------------------function Menu4_3_2_Callback(hObject, eventdata, handles) % hObject handle to Menu4_3_2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;BW = medfilt2(IM); %用于3*3滤波窗口对图像进行中值滤波处理 %若用[m,n], K = medfilt2(IM, [m,n])axes(handles.axes2);imshow(BW);%--------------------------------------------------------------------function Menu4_3_3_Callback(hObject, eventdata, handles) % hObject handle to Menu4_3_3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;[f1,f2] = freqspace(size(IM),'meshgrid'); 生成频率序列矩阵 Hd = ones(size(IM)); %构造滤波器大小r = sqrt(f1.^2 + f2.^2); %构造滤波器决策函数Hd(r>0.5) = 0; %构造滤波器,半径r>0.5Y = fft2(double(IM)); %对I进行傅里叶变换Y = fftshift(Y); %频谱平移Ya = Y.*Hd; %滤波Ya = ifftshift(Ya); %反变换BW = ifft2(Ya);axes(handles.axes2);imshow(uint8(BW));%--------------------------------------------------------------------function Menu4_4_Callback(hObject, eventdata, handles) % hObject handle to Menu4_4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) %--------------------------------------------------------------------function Menu4_4_1_Callback(hObject, eventdata, handles) % hObject handle to Menu4_4_1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;h = [-1,-1,-1;-1,9,-1;-1,-1,-1];% 八领域BW = imfilter(IM,h);axes(handles.axes2);imshow(uint8(BW));%--------------------------------------------------------------------function Menu4_4_2_Callback(hObject, eventdata, handles) % hObject handle to Menu4_4_2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;[f1,f2] = freqspace(size(IM),'meshgrid');% 生成频率序列矩阵 Hd = ones(size(IM)); %构造滤波器大小r = sqrt(f1.^2 + f2.^2); %构造滤波器决策函数Hd(r<0.1) = 0; %构造滤波器,半径r<0.1Y = fft2(double(IM)); %对I进行傅里叶变换Y = fftshift(Y); %频谱平移Ya = Y.*Hd; %滤波Ya = ifftshift(Ya); %反变换BW = ifft2(Ya);axes(handles.axes2);imshow(uint8(BW));%--------------------------------------------------------------------function Menu5_3_1_Callback(hObject, eventdata, handles) % hObject handle to Menu5_3_1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;BW = edge(IM,'roberts');axes(handles.axes2);imshow(BW);%--------------------------------------------------------------------function Menu5_3_2_Callback(hObject, eventdata, handles) % hObject handle to Menu5_3_2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;BW = edge(IM,'sobel');axes(handles.axes2);imshow(BW);%--------------------------------------------------------------------function Menu5_3_3_Callback(hObject, eventdata, handles) % hObject handle to Menu5_3_3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;BW = edge(IM,'prewitt');axes(handles.axes2);imshow(BW);%--------------------------------------------------------------------function Menu5_3_4_Callback(hObject, eventdata, handles) % hObject handle to Menu5_3_4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;BW = edge(IM,'canny');axes(handles.axes2);imshow(BW);%--------------------------------------------------------------------function Menu5_3_5_Callback(hObject, eventdata, handles) % hObject handle to Menu5_3_5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;BW = edge(IM,'zerocross');axes(handles.axes2);imshow(BW);%--------------------------------------------------------------------function Menu5_4_Callback(hObject, eventdata, handles) % hObject handle to Menu5_4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) %--------------------------------------------------------------------function Menu5_5_Callback(hObject, eventdata, handles) % hObject handle to Menu5_5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) %--------------------------------------------------------------------function Menu6_Callback(hObject, eventdata, handles) % hObject handle to Menu6 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) %--------------------------------------------------------------------function Menu6_1_Callback(hObject, eventdata, handles) % hObject handle to Menu6_1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;len = 25;theta = 35;PSF = fspecial('motion', len, theta);BW = deconvwnr(IM, PSF);axes(handles.axes2);imshow(BW);%--------------------------------------------------------------------function Menu7_2_2_Callback(hObject, eventdata, handles) % hObject handle to Menu7_2_2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;BW = rgb2gray(IM);axes(handles.axes2);imshow(BW);%--------------------------------------------------------------------function Menu7_2_3_Callback(hObject, eventdata, handles) % hObject handle to Menu7_2_3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) %--------------------------------------------------------------------function Menu7_2_4_Callback(hObject, eventdata, handles) % hObject handle to Menu7_2_4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global IM;global BW;BW = rgb2gray(IM);axes(handles.axes2);imshow(BW);colormap(jet);%设置色彩索引。