您的当前位置:首页数字图像处理 阮秋琦 MATLAB源程序要点

数字图像处理 阮秋琦 MATLAB源程序要点

2021-08-26 来源:爱问旅游网
%系统自动生成的创建对话框的代码 function varargout = myproject(varargin) % MYPROJECT M-file for myproject.fig

% MYPROJECT, by itself, creates a new MYPROJECT or raises the existing % singleton*. %

% H = MYPROJECT returns the handle to a new MYPROJECT or the handle to % the existing singleton*. %

% MYPROJECT('CALLBACK',hObject,eventData,handles,...) calls the local

% function named CALLBACK in MYPROJECT.M with the given input arguments. %

% MYPROJECT('Property','Value',...) creates a new MYPROJECT or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before myproject_OpeningFcn gets called. An

% unrecognized property name or invalid value makes property application % stop. All inputs are passed to myproject_OpeningFcn via varargin. %

% *See GUI Options on GUIDE's Tools menu. Choose \"GUI allows only one % instance to run (singleton)\". %

% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help myproject

% Last Modified by GUIDE v2.5 07-Jun-2008 11:33:02

% Begin initialization code - DO NOT EDIT gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ...

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @myproject_OpeningFcn, ... 'gui_OutputFcn', @myproject_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 myproject is made visible.

function myproject_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 myproject (see VARARGIN)

% Choose default command line output for myproject handles.output = hObject;

% Update handles structure guidata(hObject, handles);

% UIWAIT makes myproject wait for user response (see UIRESUME) % uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.

function varargout = myproject_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 lingcunwei.

function lingcunwei_Callback(hObject, eventdata, handles) %另存为按钮的回调函数 global ImagenUmbral %定义全局变量 if isempty(ImagenUmbral)==1,msgbox('Doesn''t exist an image');return,

end %如果ImagenUmbral不包含图像,则弹出对话框并显示'Doesn''t exist an image' [filename,pathname]=uiputfile({'*.jpg';,'*.tif';,'*.gif';,'*.bmp';,'*.png';, ... '*.hdf';,'*.pcx';,'*.xwd';,'*.ico';,'*.cur';,'*.ras';, ...

'*.pdm';,'*.pgm';,'*.ppm'},'Save file name'); %显示保存文件的对话框 if isequal(filename,0) | isequal(pathname,0)

errordlg('Saving canceled','Threshold GUI'); error('Saving canceled')

else %如果不存在该文件,或者不存在保存路径,则显示错误信息

try

imwrite(ImagenUmbral,[ pathname,filename]); %保存文件 end %try end %if

% hObject handle to lingcunwei (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

%打印按钮的回调函数

% --- Executes on button press in dayinshuchu.

function dayinshuchu_Callback(hObject, eventdata, handles) %打印按钮的回调函数 printdlg %显示打印对话框 % hObject handle to dayinshuchu (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

%复制到剪切板的回调函数,其功能为将处理后的图像存储到剪切板,以备处理图像处理后的图像之用。

% --- Executes on button press in fuzhidaojianqieban.

function fuzhidaojianqieban_Callback(hObject, eventdata, handles)%复制到剪切板按钮的回调函数

global ImagenUmbral %处理后的图像 global J %处理前的图像

J=ImagenUmbral %将处理后的图像赋予处理前的图像 % hObject handle to fuzhidaojianqieban (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

%几何变换的回调函数,它包含三个基本的几何变换,分别为水平变换,垂直变换,对角变换。均使用了将像素灰度值进行对换的方式。 % --- Executes on button press in jihebianhuan.

function jihebianhuan_Callback(hObject, eventdata, handles)

global ImagenUmbral %定义一个全局变量ImagenUmbral

global J %使用全局变量J selection = questdlg('请选择几何变换','选择几何变换','水平镜像','垂直镜像','对角镜像','default')

if strcmp(selection,'水平镜像') %如果选择“水平镜像”

[M,N]=size(J) %测量图像尺寸参数 I=J %将J赋给I

for i=1:M %从第一行到最后一行

for j=1:N/2 %对每一行的第一个像素到中间的一个像素 t=I(i,j);I(i,j)=I(i,N-j+1);I(i,N-j+1)=t; %交换这一行第一个像素和最后一个像

素的灰度值,交换第二个和倒数第二个灰度值,以此类推,直到中间的像素。

end %end for end %end for

subplot(224); %分割绘图窗口为两行两列,将句柄移到第四个位置

imshow(I) %显示图像

ImagenUmbral=I; %将图像赋予全局变量ImagenUmbral else if strcmp(selection,'垂直镜像') %如果选择“垂直镜像”

[M,N]=size(J) %测量图像尺寸参数 I=J %将J赋给I

for j=1:N %从第一列到最后一列

for i=1:M/2 %对每一列的第一个像素到中间的一个像素

t=I(i,j);I(i,j)=I(M-i+1,j);I(M-i+1,j)=t; %交换这一列第一个像素和最后一个像素的灰度值,交换第二个和倒数第二个灰度值,以此类推,直到中间的像素。 end %end for end %end for

subplot(224); %分割绘图窗口为两行两列,将句柄移到第四个位置

imshow(I) %显示图像

ImagenUmbral=I; %将图像赋予全局变量ImagenUmbral

else if strcmp(selection,'对角镜像') %如果选择“垂直镜像” I=J %将J赋给I

[M,N]=size(I) %测量图像尺寸参数 for i=1:M %从第一行到最后一行

for j=1:N/2 %对每一行的第一个像素到中间的一个像素

t=I(i,j);I(i,j)=I(M-i+1,N-j+1);I(M-i+1,N-j+1)=t;%交换第i行的第一个像素和M-i+1行的最后一个像素的灰度值,以此类推,直到中间的像素。

end %end for end %end for

subplot(224); %分割绘图窗口为两行两列,将句柄移到第四个位置

imshow(I) %显示图像

ImagenUmbral=I; %将图像赋予全局变量ImagenUmbral

end %end of else if strcmp(selection,'对角镜像')

end %end of else if strcmp(selection,'垂直镜像')

end %end of if strcmp(selection,'

水平镜像')

% hObject handle to jihebianhuan (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

%灰度反转按钮的回调函数,灰度反转采用公式T=L-1-S,其中S为存储原始图像的灰度值的矩阵,T为存储反转后图像灰度值的矩阵。 % --- Executes on button press in huidufanzhuan.

function huidufanzhuan_Callback(hObject, eventdata, handles)%灰度反转按钮的回调函数

global ImagenUmbral %定义一个全局变量ImagenUmbral,将灰度反转后的图像存入

ImagenUmbral中

global J %使用全局变量J

A=double(J) %将图像J的各点像素值存入矩阵A中

A=255-A %用255减去A的各点像素值,再重新存入A中

A=uint8(A) %将A的每个元素转换成整数 subplot(224) %分割绘图窗口为两行两列,将句柄移到第四个位置 imshow(A) %显示图像A

ImagenUmbral=A %将A赋给全局变量ImagenUmbral % hObject handle to huidufanzhuan (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

%直方图均衡化按钮的回调函数,直方图均衡化的处理目的是使图像变得清晰,明快。 % --- Executes on button press in zhifangtujunhenghua.

function zhifangtujunhenghua_Callback(hObject, eventdata, handles)%直方图均衡化按钮的回调函数

global ImagenUmbral %定义一个全局变量ImagenUmbral,将直方图均衡化后的图像存入ImagenUmbral中

global J %使用全局变量J

subplot(2,2,4); %分割绘图窗口为两行两列,将当前句柄移到第四个位置 %W = histeq(J); %Matlab自带直方图均衡化函数 PS=J %令PS为待处理的图像 [m,n]=size(PS); %测量图像尺寸参数

GP=zeros(1,256); %预创建存放灰度出现概率的向量 for k=0:255 %对每一个像素值

GP(k+1)=length(find(PS==k))/(m*n);%计算每级灰度出现的概率,将其存入GP中相应位置

end %end for

S1=zeros(1,256); %分配一个256维数组 for i=1:256 %对每一个像素值

for j=1:i %对从1到这个像素值的所有像素的

S1(i)=GP(j)+S1(i); %计算Sk,Sk为一个映射,将对从1到这个像素值的所有

像素的概率相加

end %end for end %end for

S2=round((S1*256)+0.5); %将Sk归到相近级的灰度

PA=PS; %定义一个与PS一样大小的矩阵 for i=0:255 %对每一个像素值

PA(find(PS==i))=S2(i+1); %将各个像素归一化后的灰度值赋给这个像素 end %end for

imshow(PA) %显示均衡化后的图像

ImagenUmbral=PA; %将均衡化图像赋给ImagenUmbral % hObject handle to zhifangtujunhenghua (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

%直方图统计按钮的回调函数,此按钮可以统计处理前后的图像的直方图。 % --- Executes on button press in zhifangtutongji.

function zhifangtutongji_Callback(hObject, eventdata, handles)%直方图统计按钮的回调函数 global ImagenUmbral %定义一个全局变量ImagenUmbral global J %使用全局变量J figure %弹出绘图窗口

subplot(211) %分割绘图窗口为两行一列,将当前句柄移到第一个区域 [m,n]=size(J); %测量图像尺寸参数

GP=zeros(1,256); %预创建存放灰度出现概率的向量 for k=0:255 %对每一个像素

GP(k+1)=length(find(J==k))/(m*n); %计算每级灰度出现的概率,将其存入GP中相应位置

end %end for bar(0:255,GP,'b') %绘制直方图

title('原图像直方图') %标题为'原图像直方图' subplot(212) %分割绘图窗口为两行一列,将当前句柄移到第二个区域

K=ImagenUmbral %将全局变量ImagenUmbral赋予K [m,n]=size(K); %测量图像尺寸参数

GP=zeros(1,256); %预创建存放灰度出现概率的向量 for k=0:255 %对每一个像素

GP(k+1)=length(find(K==k))/(m*n);%计算每级灰度出现的概率,将其存入GP中相应位置 end %end for bar(0:255,GP,'b') %绘制直方图

title('处理后图像直方图') %标题为'处理后图像直方图' % hObject handle to zhifangtutongji (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

%图像复原按钮的回调函数,采用中值滤波和均值滤波两种方法,其中,中值滤波是将图像中一点的值用该点的一个邻域中各点值的中值代替,以达到滤波的效果。均值滤波与之不同的是将图像中一点的值用该点的一个邻域中各点值的均值代替。 % --- Executes on button press in tuxiangfuyuan.

function tuxiangfuyuan_Callback(hObject, eventdata, handles)%图像复原按钮的回调函数

global ImagenUmbral %定义一个全局变量ImagenUmbral global J %使用全局变量J

selection = questdlg('请选择图像复原方法','图像复原方法','中值滤波','均值滤波','default') if strcmp(selection,'中值滤波') %如果选择'中值滤波' A=J %将J赋给A

[m,n] = size(A); %测量图像尺寸参数 B=A; %将A赋给B pixel_block = zeros(1,9); %开辟一个一行九列的数组,均赋于初值0 for i = 2:m-1 %对A中的各个像素点(不包括边界) for j = 2:n-2 pixel_block = reshape(A(i-1:i+1,j-1:j+1),9,1); %采用3*3的窗口,将一个像素点及其周围的8各点,依次存入新开辟的数组pixel_block中 sorted_block = sort(pixel_block); %将数组pixel_block排序

block_median = sorted_block(5); %将数组的中值赋予block_median

B(i,j) = block_median; %将block_median赋予B的相应位置的像素值 end; %end of for j = 2:n-2 end; %end of for i = 2:m-1

B = uint8(B); %将B中所有元素转换成0~255之间的整数

subplot(224) %分割绘图窗口为两行两列,将句柄移到第四个位置 imshow(B) %显示图像B

ImagenUmbral=B %将B赋给全局变量ImagenUmbral else if strcmp(selection,'均值滤波')%如果选择'均值滤波' A=J %将J赋给A

[m,n] = size(A); %m为A的行数,n为A的列数 B=A; %将A赋给B

pixel_block = zeros(1,9); %开辟一个一行九列的数组,均赋于初值0 for i = 2:m-1 %对A中的各个像素点(不包括边界) for j = 2:n-1

pixel_block = reshape(A(i-1:i+1,j-1:j+1),3^2,1);%采用3*3的窗口,将一个像素点及其周围的8各点,一次存入新开辟的数组pixel_block中

mean_block = mean(pixel_block); %求出数组中所有元素的平均值

B(i,j) = mean_block; %将mean_block赋予B的相应位置的像素值 end; %end of for j = 2:n-2 end; %end of for i = 2:m-1

B = uint8(B); %将B中所有元素转换成0~255之间的整数

subplot(224) %分割绘图窗口为两行两列,将句柄移到第四个位置 imshow(B) %显示图像B

ImagenUmbral=B %将B赋给全局变量ImagenUmbral

end %end of else if strcmp(selection,'均值滤波')

end %end of if strcmp(selection,'中值滤波') % hObject handle to tuxiangfuyuan (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

%边缘提取的回调函数,包括三种边缘提取方法,分别为Sobel边缘算子法,Prewitte边缘算子法和Robert边缘算子法,它们都采用了求梯度的方法。 % --- Executes on button press in bianyuantiqu.

function bianyuantiqu_Callback(hObject, eventdata, handles)%边缘提取函数的回调函数 global ImagenUmbral %定义一个全局变量ImagenUmbral global J %使用全局变量J

selection = questdlg('请选择边缘算子法','边缘算子法','Sobel边缘算子法','Prewitte边缘算子法','Robert边缘算子法','default')

if strcmp(selection,'Sobel边缘算子法')%如果选择了'Sobel边缘算子法' % BW=edge(J,'sobel') %Matlab自带sobel边缘算子法 I=J %将J赋予I

A=J %令A=J,准备将处理后图像存入A中 [M,N]=size(I); %测量图像尺寸参数

I=double(I); %将I中的所有元素变为双精度型 for y=2:M-1 %对每一个像素(不包括边界) for x=2:N-1

B(1)=I(x-1,y+1)+I(x,y+1)*2+I(x+1,y+1)-I(x-1,y-1)-I(x,y-1)*2-I(x+1,y-1);%用第一个方向算子对这个像素做卷积

B(2)=I(x-1,y)+I(x-1,y+1)*2+I(x,y+1)-I(x,y-1)-I(x+1,y+1)*2-I(x+1,y); %用第二个方向算子对这个像素做卷积

B(3)=I(x-1,y-1)+I(x-1,y)*2+I(x-1,y+1)-I(x+1,y+1)-I(x+1,y)*2-I(x+1,y+1);%用第三个方向算子对这个像素做卷积

B(4)=I(x-1,y)+I(x-1,y-1)*2+I(x,y+1)-I(x+1,y)-I(x+1,y+1)*2-I(x,y+1); %用第四个方向算子对这个像素做卷积

B(5)=I(x-1,y-1)+I(x,y-1)*2+I(x+1,y+1)-I(x-1,y+1)-I(x,y+1)*2-I(x+1,y+1);%用第五个方向算子对这个像素做卷积

B(6)=I(x,y-1)+I(x+1,y+1)*2+I(x+1,y)-I(x-1,y)-I(x-1,y+1)*2-I(x,y+1); %用第六个方向算子对这个像素做卷积

B(7)=I(x+1,y+1)+I(x+1,y)*2+I(x+1,y+1)-I(x-1,y-1)-I(x-1,y)*2-I(x-1,y+1);%用第七个方向算子对这个像素做卷积

B(8)=I(x+1,y)+I(x+1,y+1)*2+I(x,y+1)-I(x-1,y)-I(x-1,y-1)*2-I(x,y-1); %用第八个方向算子对这个像素做卷积

b=max(B) %将这八个卷积值的最大值赋予b if b>255 b=255 %如果b的值超过255,则重置为255 end %end if

A(x,y)=b; %将b作为A中相应点的输出值 end %end for end %end for

subplot(224) %分割绘图窗口为两行两列,将句柄移到第四个位置 imshow(A) %显示图像A

ImagenUmbral=A %将A赋给全局变量ImagenUmbral else if strcmp(selection,'Prewitte边缘算子法')%如果选择了'Prewitte边缘算子法' % BW=edge(J,'prewitt') %Matlab自带prewitte边缘算子法 I=J %将J赋予I

A=J %令A=J,准备将处理后图像存入A中 [M,N]=size(I); %将I的各点像素值存入M行N列的矩阵中 I=double(I); %将I中的所有元素变为双精度型 for y=2:M-1 %对每一个像素(不包括边界)

for x=2:N-1 B(1)=I(x-1,y+1)+I(x,y+1)+I(x+1,y+1)-I(x-1,y-1)-I(x,y-1)-I(x+1,y-1);%用第一个方向算子对这个像素做卷积

B(2)=I(x-1,y)+I(x-1,y+1)+I(x,y+1)-I(x,y-1)-I(x+1,y+1)-I(x+1,y); %用第二个方向算子对这个像素做卷积

B(3)=I(x-1,y-1)+I(x-1,y)+I(x-1,y+1)-I(x+1,y+1)-I(x+1,y)-I(x+1,y+1);%用第三个方向算子对这个像素做卷积

B(4)=I(x-1,y)+I(x-1,y-1)+I(x,y+1)-I(x+1,y)-I(x+1,y+1)-I(x,y+1); %用第四个方向算子对这个像素做卷积

B(5)=I(x-1,y-1)+I(x,y-1)+I(x+1,y+1)-I(x-1,y+1)-I(x,y+1)-I(x+1,y+1);%用第五个方向算子对这个像素做卷积

B(6)=I(x,y-1)+I(x+1,y+1)+I(x+1,y)-I(x-1,y)-I(x-1,y+1)-I(x,y+1); %用第六个方向算子对这个像素做卷积

B(7)=I(x+1,y+1)+I(x+1,y)+I(x+1,y+1)-I(x-1,y-1)-I(x-1,y)-I(x-1,y+1);%用第七个方向算子对这个像素做卷积

B(8)=I(x+1,y)+I(x+1,y+1)+I(x,y+1)-I(x-1,y)-I(x-1,y-1)-I(x,y-1); %用第八个方向算子对这个像素做卷积

b=max(B) %将这八个卷积值的最大值赋予b if b>255 b=255 %如果b的值超过255,则重置为255 end %end if

A(x,y)=b; %将b作为A中相应点的输出值 end %end for end %end for

subplot(224) %分割绘图窗口为两行两列,将句柄移到第四个位置 imshow(A) %显示图像A

ImagenUmbral=A %将A赋给全局变量ImagenUmbral else if strcmp(selection,'Robert边缘算子法') %如果选择了'Robert边缘算子法' %BW=edge(J,'roberts') %Matlab自带roberts边缘算子法

I=J %将J赋给I [M,N]=size(I); %测量图像尺寸参数 I=double(I)

for y=1:M-1 %对每一个像素 for x=1:N-1

d=2*(abs(I(x,y)-I(x+1,y+1))+abs(I(x+1,y)-I(x,y+1)));%用绝对值近似计算梯度值

if (d>255) d=255 %如果d超过255,则将d置为255 end %end if

K(x,y)=d; %将该点的灰度值置为d end %end of for y=1:N-1 end %end of for x=1:M-1

subplot(224) %分割绘图窗口,将当前句柄移至第二行第二个位置 imshow(K) %显示I

ImagenUmbral=K %将I赋给全局变量ImagenUmbral

end %end of if strcmp(selection,'Robert边缘算子法') end %end of else if strcmp(selection,'Robert边缘算子法') end %end of if strcmp(selection,'Sobel边缘算子法') % hObject handle to bianyuantiqu (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% --- Executes on button press in weicaise.

function weicaise_Callback(hObject, eventdata, handles)%伪彩色按钮的回调函数

global ImagenUmbral %定义一个全局变量ImagenUmbral,将灰度反转后的图像存入ImagenUmbral中 global J %使用全局变量J

selection = questdlg('请选择伪彩色处理','选择伪彩色处理','医学伪彩色处理','遥感伪彩色处理','default')

if strcmp(selection,'医学伪彩色处理') %如果选择了'医学伪彩色处理' I=J %将J赋给I

[M,N]=size(I); %测量图像尺寸参数 for i=1:M %对每一个像素 for j=1:N

b=I(i,j) %令变量b等于当前灰度值 if b<64 %如果当前灰度值小于64 R(i,j)=0; %将这个点的R分量置为0 G(i,j)=4*b; %将这个点的G分量置为4*b B(i,j)=255; %将这个点的B分量置为255

else if b<128 %如果当前灰度值小于128,大于64

R(i,j)=0; %将这个点的R分量置为0 G(i,j)=255; %将这个点的G分量置为255

B(i,j)=(127-b)*4; %将这个点的B分量置为(127-b)*4 else if b<192 %如果当前灰度值小于192,大于128

R(i,j)=(b-128)*4; %将这个点的R分量置为b-128)*4 G(i,j)=255; %将这个点的G分量置为255 B(i,j)=0; %将这个点的B分量置为0 else %如果当前灰度值大于192

R(i,j)=255; %将这个点的R分量置为255 G(i,j)=(255-b)*4; %将这个点的G分量置为(255-b)*4 B(i,j)=0; %将这个点的B分量置为0 end %end of if b<192 end %end of if b<128 end %end of if b<64

G2C(i,j,1)=R(i,j); %将新的R分量存入图像中G2C中 G2C(i,j,2)=G(i,j); %将新的R分量存入图像中G2C中 G2C(i,j,3)=B(i,j); %将新的R分量存入图像中G2C中 end %end of for j=1:N end %end of for i=1:M

subplot(224) %分割绘图窗口为两行两列,将句柄移到第四个位置

imshow(G2C); %显示图像G2C

ImagenUmbral=G2C; %将G2C赋给全局变量ImagenUmbral

else if strcmp(selection,'遥感伪彩色处理') %如果选择'遥感伪彩色处理' I=J %将J赋给I

[M,N]=size(I); %测量图像尺寸参数 for i=1:N %对每一个像素 for j=1:M

b=I(i,j); %令变量b等于当前灰度值 if b<85 %如果当前灰度值小于85 R(i,j)=0; %将这个点的R分量置为0

G(i,j)=(5-b/42.5)*b; %将这个点的G分量置为(5-b/42.5)*b B(i,j)=(5-(84-b)/42.5)*(84-b); %将这个点的B分量置为(5-(84-b)/42.5)*(84-b)

else if b<170 %如果当前灰度值小于170

R(i,j)=(5-(b-85)/42.5)*(b-85); %将这个点的R分量置为(5-(b-85)/42.5)*(b-85)

G(i,j)=(5-(169-b)/42.5)*(169-b); %将这个点的G分量置为(5-(169-b)/42.5)*(169-b)

B(i,j)=0; %将这个点的B分量置为0 else %如果当前灰度值大于170

R(i,j)=(5-(255-b)/42.5)*(255-b);%将这个点的R分量置为(5-(255-b)/42.5)*(255-b)

G(i,j)=0; %将这个点的G分量置为0

B(i,j)=(5-(b-170)/42.5)*(b-170);%将这个点的B分量置为(5-(b-170)/42.5)*(b-170)

end %end of if b<170 end %end of if b<85

G2C(i,j,1)=R(i,j); %将新的R分量存入图像中G2C中 G2C(i,j,2)=G(i,j); %将新的R分量存入图像中G2C中 G2C(i,j,3)=B(i,j); %将新的R分量存入图像中G2C中

end %end of for i=1:N end %end of for j=1:M

subplot(224) %分割绘图窗口为两行两列,将句柄移到第四个位置

imshow(G2C); %显示图像G2C

ImagenUmbral=G2C; %将G2C赋给全局变量ImagenUmbral

end %end of if strcmp(selection,'遥感伪彩色处理')

end %end of if strcmp(selection,'医学伪彩色处理')

% hObject handle to weicaise (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

%二值化的回调函数。二值化的处理目的是将图像各点变为黑色或者白色,可以通过阈值处理的方法实现。

% --- Executes on button press in erzhihua.

function erzhihua_Callback(hObject, eventdata, handles)%二值化按钮的回调函数 global ImagenUmbral %定义一个全局变量ImagenUmbral,将二值化处理后的图像存入ImagenUmbral中

global J %使用全局变量J

prompt={'请输入阈值:'}; %对话框提示 name='输入阈值'; %输入框提示 numlines=1; %设置以个输入框

defaultanswer={'128'}; %设置这个输入框的一个缺省值为0.5

answer=inputdlg(prompt,name,numlines,defaultanswer); %弹出对话框,输入阈值 new=str2num(answer{ 1}); %将输入的值赋给变量new

I=J %将J赋给I [M,N]=size(I); %测量图像尺寸参数 for i=1:M %对每一个像素 for j=1:N

if I(i,j)else I(i,j)=255; %否则将这个像素值置为255 end %if语句结束

end %内层for语句结束 end %外层for语句结束

subplot(224); %分割绘图窗口为两行两列,在第四个位置绘图 imshow(I) %显示二值化后的图像

ImagenUmbral=I %将I赋给全局变量ImagenUmbral % hObject handle to erzhihua (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

%图像变换的回调函数,包括Fourier变换和离散余弦变换。 % --- Executes on button press in tuxiangbianhuan.

function tuxiangbianhuan_Callback(hObject, eventdata, handles)%图像变换按钮的回调函数 global ImagenUmbral %定义一个全局变量ImagenUmbral,将二值化处理后的图像存入ImagenUmbral中

global J %使用全局变量J

selection = questdlg('请选择图像变换方法','图像变换方法','Fourier变换','离散余弦变换','default')

if strcmp(selection,'Fourier变换') B=fftshift(fft2 (J)); subplot(224)

imshow(log(abs(B)),[]) ImagenUmbral=B

elseif strcmp(selection,'离散余弦变换') A = dct2(J); subplot(224)

ImagenUmbral=A

imshow(log(abs(A)),[]), colormap(jet(64)), colorbar end

% hObject handle to tuxiangbianhuan (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

%打开文件按钮的回调函数,功能为点击打开按钮之后,将图像显示在窗口的右上角。 % --- Executes on button press in dakaiwenjian.

function dakaiwenjian_Callback(hObject, eventdata, handles)%打开文件按钮的回调函数 global Archivo %定义全局变量,用来存储原始图像 [NameArchivo,PathArchivo]=uigetfile({'*.bmp';,'*.tif';,'*.gif';,'*.jpg';,'*.png';, ... '*.hdf';,'*.pcx';,'*.xwd';,'*.ico';,'*.cur';,'*.ras';, ...

'*.pdm';,'*.pgm';,'*.ppm'}); %打开图像文件

Archivo=[PathArchivo,NameArchivo];%把从文件载入的图像赋给Archivo CargarImagen(handles) %调用CargarImagen函数,显示图像

%==========================================================================

function CargarImagen(handles) %显示图片

%==========================================================================

global Archivo %使用全局变量Archivo global J %定义全局变量J

subplot(222); %把绘图窗口分成两行两列,将句柄移到第二个位置

img=imread(Archivo); %读取文件Archivo,设置其句柄为img imshow(img); %在第二个位置显示图片 title('原始图像') %设置图像标题为:原始图像

J=img %将图片赋给全局变量J

%去除彩色按钮的回调函数。利用公式I=0.299*R+0.587*G+0.114*B,将图像去除彩色。 % --- Executes on button press in quchucaise.

function quchucaise_Callback(hObject, eventdata, handles)%祛除彩色按钮的回调函数 global J %定义全局变量J

subplot(2,2,2); %把绘图窗口分成两行两列,将当前句柄移到第二个位置 R=J(:,:,1) %分离R分量 G=J(:,:,2) %分离G分量 B=J(:,:,3) %分离B分量

I=0.299*R+0.587*G+0.114*B %利用白光与红,绿,蓝色光的关系 imshow(I) %显示灰度图像

J=I %将图片赋给全局变量J % hObject handle to quchucaise (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

%从剪切板粘贴按钮的回调函数

% --- Executes on button press in congjianqiebanniantie.

function congjianqiebanniantie_Callback(hObject, eventdata, handles) %从剪切板粘贴按钮的回调函数

global J %使用全局变量J

subplot(222) %把绘图窗口分成两行两列,将当前句柄移至第二个位置 imshow(J) %显示剪切板中的图像 % hObject handle to congjianqiebanniantie (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

%随机噪声按钮的回调函数,功能为给图像加入随机噪声。 % --- Executes on button press in suijizaosheng.

function suijizaosheng_Callback(hObject, eventdata, handles)%随机噪声按钮的回调函数 global J %使用全局变量J

subplot(2,2,2); %分割绘图窗口,将当前句柄移至第二个位置 I=J %令I=J I=imnoise(I,'speckle',0.01) %加入随机噪声 %[M,N]=size(I) % for i=1:50

% for j=1:50

% d=rand()*32767/1024

% I(i,j)=I(i,j)*244/256+d % end % end imshow(I) J=I

title('加入随机噪声后的图像')

% hObject handle to suijizaosheng (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

%椒盐噪声按钮的回调函数,功能为给图像加入椒盐噪声。 % --- Executes on button press in jiaoyanzaosheng.

function jiaoyanzaosheng_Callback(hObject, eventdata, handles)%椒盐噪声按钮的回调函数 global J %使用全局变量J

subplot(2,2,2); %分割绘图窗口,将当前句柄移至第二个位置 I=J %令I=J I=imnoise(I,'salt & pepper',0.02)%加入椒盐噪声 %[M,N]=size(I) % for i=1:M

% for j=1:N

% if rand()*32767>31500 % I(i,j)=0 % end % end % end imshow(I) J=I

title('加入椒盐噪声后的图像')

% hObject handle to jiaoyanzaosheng (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

%恢复原始图像按钮的回调函数,功能为重新载入原始图像。 % --- Executes on button press in huifuyuanshituxiang.

function huifuyuanshituxiang_Callback(hObject, eventdata, handles)%恢复原始图像按钮的回调函数

global Archivo %使用全局变量Archivo global J %定义全局变量J

subplot(2,2,2); %分割绘图窗口,将当前句柄移至第二个位置 img=imread(Archivo); %重新载入图像 imshow(img) %显示图像

J=img %将重新载入的图像存入J中

title('原始图像') %标题设为'原始图像' % hObject handle to huifuyuanshituxiang (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

%关闭窗口的回调函数。

% --- Executes on button press in tuichuxitong.

function tuichuxitong_Callback(hObject, eventdata, handles)%退出系统按钮的回调函数 delete(handles.figure1) %关闭窗口 % hObject handle to tuichuxitong (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

实验的主要界面显示效果

图像预处理界面

选择图像复原对话框

中值滤波结果

直方图统计界面

原始图像

加入椒盐噪声后的图像

中值滤波后的图像

均值滤波后的图像

Roberts边缘算子法

Prewitt边缘算子法

Sobel边缘算子法

伪彩色处理结果

二值化处理后的图像

因篇幅问题不能全部显示,请点此查看更多更全内容