MATLAB数字图像小程序设计

目录

  1. 设计目的…………………..………………….…………2
  2. 设计要求………………….………………………….….2
  3. 设计的内容………………..……………………….……2
  4. 课题分析…………………………………………….………..3
  5. 总体设计……………….…………………………….……….3
  6. 具体设计……………………………………………..…….…4
    1. 文件……………….………………………………….……….4


6.1.1、打开………..…………………………………….…………4

6.1.2、保存…………………………..………………….…………4

6.1.3、打印…………………………..………………….…………4

6.1.4、退出……………………..……………………………….…4

6.2、直方图统计…………………………..…………………………………4

6.2.1、R直方图………………………..………………….……………4

6.2.2、G直方图………………………..………………….……………4

6.2.3、B直方图…………………………..……………….……………4

6.3、图像增强处里…………………………………..……………………5

6.3.1、直方图均衡化…………………….…………….………………5

6.3.2、对比度展宽………………….…………….…………………6

6.3.3、动态范围调整…………………………….…………………6

6.3.4、空间域平滑算法…………………………….…………………6

6.3.4.1、均值滤波……………………………………………….7

6.3.4.2、中值滤波…………………………………………………7

6.3.4.3、边界保持滤波……………………………………………8

6.4、图像分割………………………………..…………..………………8

6.4.1、均匀性度量法……………………………………………………8

6.4.2、类间最大距离法…………………………………………….9

6.4.3、局部阈值法…………………………………………………..9

6.5、颜色空间转化……………………………………..………..………9

6..5.1、RGB转HSV……………………………………………………10

6.5.2、RGB转HIS…………………………………………………….10

6.6、其他图像处理功能……………………………………………………10

6.6.1、锐化…………………………………………………………….10

6.6.2、傅里叶………………………………………………………….10\\




  1. 程序调试及结果分析………………….……………………11
  2. 心得体会…………………………….………………………11
  3. 参考文献…………………………….………………………11
  4. 附录………………………….………………………………12


一、设计目的

1、提高分析问题、解决问题的能力,进一步巩固数字图像处理系统中的基本原理与方法。

2、熟悉掌握一门计算机语言,可以进行数字图像的应用处理的开发设计。


二、设计要求

  1. 要求独立完成设计项目,开发工具为MATLAB,具体自选。各组长有责任督促组员完成任务并提交报告;
  2. 时间为4月28日~6月28日为其两个月的业余时间。


三、设计的内容

学习MATLAB GUI程序设计,利用MATLAB图像处理工具箱,设计和实现自己的Photoshop 。要求:按照软件工程方法,根据需求进行程序的功能分析和界面设计,给出设计详细说明。然后按照自己拟定的功能要求进行程序设计和调试。

整个系统要完成的基本功能大致如下:

  1. 能对图像文件(bmp、 jpg、 tiff、 gif等)进行打开、保存、另存、打印、退出等功能操作;
  2. 数字图像的统计信息功能:直方图的统计及绘制;
  3. 数字图像的增强处理功能:
  4. 直方图的均衡化
  5. 对比度展宽
  6. 动态范围调整
  7. 空间域平滑算法的各种算法(如均值滤波、中值滤波、边界保持的滤波方法等)

4、数字图像由RGB转换成HIS空间并分别显示其分量图。

5、数字图像分割功能:

可采用两种以上方法进行图像分割。


总体设计

由于要实现的功能并不是很多,所以在排版的过程中,把各个功能都安排在目录栏上,整体安排如下图所示:


v2-80d76f8ab825b7f20e43468a6a194f43_b.jpg

v2-703f06f7565d58ca02b9afb1a5358478_b.jpg

v2-0e25044134a372f8e9c353132be9c05b_b.jpg



  1. 具体设计
    1. 文件


6.1.1、打开

为了让使用者更方便的使用,所以在设计的时候,通过对话框的形式来选择文件,选择uigetfile函数来实现,uigetfile函数显示一个打开文件对话框,该对话框自动列出当前路径下的目录和文件,由于这个GUI程序的操作对象是图像文件。

Uigetfile函数的调用格式为[name,path]=yigetfile(…), 在按下对话框中的执行按钮“打开”后,返回选择的文件名和路径,分别保存到“ name”和“path”中。如果按下取消按钮或是发生错误,则返回值是0。 根据返回值的情况,如果是0,则弹出提示错误的对话框,否则,通过imread函数读出图像数据,把图像数据赋值给全局变量handles.image。

6.1.2、保存

同样也通过对话框的形式来保存图像数据,通过uigetfile函数选择文件名和路径,用getimage(gca)取出坐标2变换后的图像数据保存到变量i,最后用imwrite函数,把数据i存到指定的文件。

6.1.4、退出

退出比较简单,程序如下所示:

clc;

close all;

close(gcf);

6.1.3、打印

打印功能没能实现,将它设置为不可使用,可用如下代码实现

set(handles.print, 'Enable','off' ); %放在open_callback函数末尾

set(handles.print, 'Enable','off' );%放在two_OpeningFcn中

  1. 直方图统计


6.2.1、R直方图

由于RGB图像是三维图像,所以图像数据是一个三维数组,为了显示R直方图像,把三维图像降为二维,且是当最后一个参数为1时是R直方图:

x=imhist(handles.image(:,:,1)); %当然也可以选择(:,:,2) 或(:,:,3)

imshow(y);


处理前后图片效果如下:



6.2.2、G直方图

G直方图与R直方图的程序差不多只需将数值为1的R直方图变成2即可成为G直方图

x=imhist(handles.image(:,:,2));

6.2.3、B直方图

同理可得B直方图

x=imhist(handles.image(:,:,3));


RGB三种直方图统计图如下:


v2-e739532dbb01cda9c63be8f79feaff41_b.jpg

v2-cc3d007094acaad8c097b48edc1360b0_b.jpg


原图 R直方图


v2-8462be13c2d0d6dca883f0ecee19990f_b.jpg



v2-c0d9468dc965fca09f4ed227458897cd_b.jpg












G直方图 B直方图

  1. 图像增强处理

6.3.1、直方图均衡化

在balance_Callback回退函数中实现直方图均衡化

每个回退函数中都要获取图片,上面的RGB直方图也一样需获取打开的图片。打开图片的为以下程序代码:

set(handles.axes2,'HandleVisibility','ON');

axes(handles.axes2);

直方图均衡化是判断是否为灰度图。用函数isrgb了来判断,不是灰度则将其转化,否则就直接用函数:

histeq(handles.image)% handles.image是获取的图片

来直方图均衡化处理图片

图片前后效果如下:


v2-e739532dbb01cda9c63be8f79feaff41_b.jpg

v2-cdda98843af85fa8953b123fe8f0cd0f_b.jpg



6.3.2、 对比度展宽

对图像的对比度展宽刻可自己编写算法来处理,同样的,,处理结果如图:

v2-4e781b149da51cc8f9d60a03432c19f5_b.jpg



6.3.3、动态范围调整

共图像处理功能未能实现,程序中已给出处理其图像的代码,但有错误,不能找出其错位,将其正确的处理,

原因是:nw=1./(b-a).*(h-a.*ones(sx,sy));

Error:Matrix dimensions must agree

也查过资料修改该语句,有的资料说是乘除和幂方要改成点乘点除,点幂方,这个是合理,但是改正后仍然有错,是在无能为力,

代码在后面将给出,可供参考。


6.3.4、空间域平滑算法

6.3.4.1、均值滤波

经常用到的噪声有两种,高斯噪声,椒盐噪声,可以通过以下两个函数来实现:

y=imnoise(handles.img,'gaussian',p1,p2);%高斯噪声

y=imnoise(x,'salt & pepper',p1); %椒盐噪声


均值滤波中可对高斯滤波,也可以对椒盐滤波,设计过程中采用其一种图片进行处理。但两种处理的效果就不同,对高斯噪声处理的效果更加明显


均值滤波是一种采取平均灰度值的方法进行滤波,用imnoise获得噪声的图片。这个函数可获得高斯噪声,亦可获得椒盐噪声。在采用函数conv2进行均值处理,处理前后的图片比较如下:



v2-65715d4630aa705dfb09dea50ced3ad2_b.jpg

v2-e739532dbb01cda9c63be8f79feaff41_b.jpg



6.3.4.2、中值滤波

中值滤波同均值滤波的程序差不多,只是进行滤波的原理不同,则采用不同的函数进行代替,用以下函数可进行中值滤波处理:

I = imnoise(handles.image,'salt & pepper', 0.02);

imshow(I);

j=medfilt2(I);

前后图片效果如下:


v2-6c0ddad0342b814e970250c52c4ed352_b.jpg

v2-26a8d253e319d1594409d3ac64d7910d_b.jpg




6.3.4.3、边界保持滤波

原理不同,采用knn函数是处理边界保持滤波的,程序代码的形式跟前两种滤波差不多:

I = imnoise(handles.image,'salt & pepper', 0.02);

imshow(I);

j=knn2(I);


前后图片效果如下:


v2-e739532dbb01cda9c63be8f79feaff41_b.jpg

v2-a1759cf8009e0e3af816957f2ebbcbd8_b.jpg


  1. 图像分割:


图象分割是按照某些特性(如灰度级,频谱,颜色,纹理等)将图象划分成一些区域,在这些区域内其特性是相同的或者说是均匀的,两个相邻区域彼此特性则是不同的,其间存在着边缘或边界


6.4.1、均匀性度量法

当图像被分为目标物和背景两个类时,属于同一类别的像素值分布方差最小,也即具有均匀性。

给定一初始阈值Th=Th0,将图像分为C1和C2两类

v2-35d60d7e94f9941336825436ff9ca2aa_b.jpg

分别计算两类中的方差

分别计算两类在图像中的分布概率

选择最佳阈值 Th=Th*, 将图像分为C1和C2两类,满足


均匀性度量方法的处理结果:



v2-e739532dbb01cda9c63be8f79feaff41_b.jpg

v2-67a785d61c05463925988e215c2eef06_b.jpg






6.4.2、类间最大距离法.

采用最佳阈值分割后,两类之间的差异最大,且差异采用两类中心与阈值间的距离差度量


给定一初始阈值Th=Th0,将图像分为C1和C2两类

分别计算两类的灰度均值

v2-1bf87ec35deae28339c9ac426708fd1e_b.jpg

计算相对距离度量值 s

选择最佳阈值 Th=Th*, 将图像分为C1和C2两类


v2-5869ea9b706c2ac816a41ad8bee3795f_b.jpg


图片效果:


v2-e739532dbb01cda9c63be8f79feaff41_b.jpg



v2-941c171e45eef2d3a28d07ecf62fd977_b.jpg


6.4.3、局部阈值法

不均匀照射,物体背景对比明显, 不能只使用一门限

灰度级校正。

图象分成小块,选择局部门限


局部阈值法的处理前后结果:


v2-0a1d71a5bbdcb418622d7ffd942b20a5_b.jpg

v2-e739532dbb01cda9c63be8f79feaff41_b.jpg


6.5、 颜色空间转化

6..5.1、RGB转HSV

色彩空间相互转化:

其中有很多种色彩空间,这里只介绍两种转换关系:

RGB转HSV,图像处理中有专门的函数将其进行转化,即rgb2hvs函数


转化图像前后对比如下:



v2-26b584ccbc3ac878c26488321d4046a0_b.jpg



6.5.2、RGB转HIS

首先获取图像的 RGB 3个通道

R=w(:,:,1);
G=w(:,:,2);
B=w(:,:,3);

观察HSI通道图像
因系统没有rgb2hsi函数,只有rgb2hsv函数,可自己编写程序实现算法

,用一个循环处理,分别得到HIS的色度,饱和度以及强度图,代码在后面实现


图形处理效果如下:


v2-4a5b9857dbaddc41c00c59030e28ef4d_b.jpg



6.6、 其他图像处理功能

6.6.1、锐化


6.6.2、傅里叶

这两个是附加的图像处理功能,在次不做过多的说明,可向大家看看处理图像结果进行对比一下,看看效果,可在后面附上代码

v2-4ac052a010dd18c7b9ad28b997757012_b.jpg

v2-e25b11dc2b4e73586e01f706ae47c1c6_b.jpg


锐化. 四种傅里叶变

参考文献

  1. 郑阿奇,曹戈,赵阳.MATLAB实用教程[M].北京:电子工业出版社
  2. 精通matlab6[1].5_(北航_张志涌).pdf

【3】MATLAB 编程 (第二版)

MATLAB Programming for Engineers Second Edition)

Stephen J. Chapman 著 邢树军 郑碧波 译

【4】相关的MATLAB图像处理函数








  1. 附录


function varargout = two(varargin)

% Begin initialization code - DO NOT EDIT

gui_Singleton = 1;

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

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @two_OpeningFcn, ...

'gui_OutputFcn', @two_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 erzhi is made visible.

function two_OpeningFcn(hObject, eventdata, handles, varargin)

% This function has no output args, see OutputFcn.

---------------------------------------------------------

%接下来是菜单的程序

---------------------------------------------------------

function file_Callback(hObject, eventdata, handles)

--------------------------------------------------------

%文件打开程序

function open_Callback(hObject, eventdata, handles)

[name,path]=uigetfile({'*.bmp'},'载入图像');

if isequal(name,0)|isequal(path,0)

errordlg('没有选中文件','出错');

return;

else

x=imread([path,name]);

axes(handles.axes1);

imshow(x);

handles.img=x;

handles.noise_img=x;

guidata(hObject,handles)

end

---------------------------------------------------

function save_Callback(hObject, eventdata, handles)

%文件保存

[filename,pathname] = uiputfile('*.bmp','图片保存为');

if isequal([filename,pathname],[0,0])

errordlg('没有保存','出错');

return;

else

file=strcat(pathname,filename);

(handles.axes2);

i=getimage(gca);

imwrite(i,file);

end

-----------------------------------------------------

function exit_Callback(hObject, eventdata, handles)

clc;

close all;

close(gcf);

---------------------------------------------------------

% 直方图

------------------------------------------------------

function zhf_Callback(hObject, eventdata, handles)

-------------------------------------------------

function red_Callback(hObject, eventdata, handles)

% R直方图

data (see GUIDATA)

set(handles.axes2,'HandleVisibility','ON');


axes(handles.axes2);

x=imhist(handles.image(:,:,1));

x1=x(1:10:256);

horz=1:10:256;

bar(horz,x1);

set(handles.axes2,'xtick',0:50:255); ------------------------------------------------------

function green_Callback(hObject, eventdata, handles)

% G直方图

set(handles.axes2,'HandleVisibility','ON');

axes(handles.axes2);

x=imhist(handles.image(:,:,2));

x1=x(1:10:256);

horz=1:10:256;

bar(horz,x1);

set(handles.axes2,'xtick',0:50:255);

------------------------------------------------------

function blue_Callback(hObject, eventdata, handles)

% B直方图

set(handles.axes2,'HandleVisibility','ON');

axes(handles.axes2);

%if isrgb(handles.img)

x=imhist(handles.image(:,:,3));

x1=x(1:10:256);

horz=1:10:256;

bar(horz,x1);

set(handles.axes2,'xtick',0:50:255);

-----------------------------------------------------

%图像增强处理

---------------------------------------------------------

function zhf_Callback(hObject, eventdata, handles)

-------------------------------------------------

function balance_Callback(hObject, eventdata, handles)

%直方图均衡化

set(handles.axes2,'HandleVisibility','ON');

axes(handles.axes2);

if isrgb(handles.image)

a=histeq(handles.image(:,:,1));

b=histeq(handles.image(:,:,2));

c=histeq(handles.image(:,:,3));

k(:,:,1)=a;

k(:,:,2)=b;

k(:,:,3)=c;

imshow(k);

else

h=histeq(handles.image);

imshow(h);

end

function zq_Callback(hObject, eventdata, handles)

-----------------------------------------------------------------

function duibidu_Callback(hObject, eventdata, handles)

%对比度展宽

set(handles.axes2,'HandleVisibility','ON');

axes(handles.axes2);

h=im2double(handles.image);

[sx,sy]=size(h);

nw=h.^0.3;

subplot(2,2,1);

imshow(h);

title('original');

subplot(2,2,2);

imshow(nw);

title('r=0.4');

subplot(2,2,3);

imshow(h.^0.5);

title('r=0.7');

subplot(2,2,4);

imshow(h.^2);

title('r=3');


--------------------------------------------------------------------

function dongtai_Callback(hObject, eventdata, handles)

%动态调整范围

set(handles.axes2,'HandleVisibility','ON');

axes(handles.axes2);

h=im2double(handles.image);

a=0.01;

b=0.35;

[sx,sy]=size(h);

[w,n]=find(h(:)<=a);

h(n)=0;

[w1,n1]=find(h(:)>b);

h(n1)=1;

nw=1./(b-a).*(h-a.*ones(sx,sy));

subplot(1,2,1);

imshow(h);

subplot(1,2,2);

imshow(nw);

-----------------------------------------------------------------

%空间域平滑算法

function pinghua_Callback(hObject, eventdata, handles)

-----------------------------------------------------------------


function junzhi_Callback(hObject, eventdata, handles)

%均值滤波

h=[1 1 1;1 1 1;1 1 1];

h=h/9;

set(handles.axes2,'HandleVisibility','ON');

axes(handles.axes2);

x=imnoise(handles.image,'gaussian',0,0.02);

imshow(x);

j=conv2(x,h);

figure,imshow(j,[]);


--------------------------------------------------------------------

function zhongzhi_Callback(hObject, eventdata, handles)

%中值滤波

set(handles.axes2,'HandleVisibility','ON');

axes(handles.axes2);

% I=imnoise(I,'gaussian',0,0.02);

I = imnoise(handles.image,'salt & pepper', 0.02);%

j=medfilt2(I);

figure,imshow(j,[]);

--------------------------------------------------------------------

function bianjie_Callback(hObject, eventdata, handles)

% 边界保持滤波

set(handles.axes2,'HandleVisibility','ON');

axes(handles.axes2);

% I=imnoise(I,'gaussian',0,0.02);

I = imnoise(handles.image,'salt & pepper', 0.02);

imshow(I);

j=knn2(I);

figure,imshow(j,[]);

-----------------------------------------------------------------


--------------------------------------------------------------------

function junyunxing_Callback(hObject, eventdata, handles)

%均与性度量法

set(handles.axes2,'HandleVisibility','ON');

axes(handles.axes2);

v=double(handles.image);

[sx,sy]=size(v);

num=sx*sy;

t=[];

for th=6:254

[r1,c1]=find(v(:)>=th);

[r2,c2]=find(v(:)<th);

if(length(r1)~=0 & length(c1)~=0 )

L1=v(r1);

else

L1=[];

end

if(length(r2)~=0 & length(c2)~=0 )

L2=v(r2);

else

L2=[];

end

m1=mean(L1(:)); m2=mean(L2(:));

Var1=sum((L1(:)-m1).^2);Var2=sum((L2(:)-m2).^2);

Var1=var(L1(:));Var2=var(L2(:));

P1=length(L1(:))/num;

P2=length(L2(:))/num;

t=[t,P1*Var1+P2*Var2];

end

[c,l]=min(t);

B=v;

[r1,c1]=find(v(:)>=l+5);

[r2,c2]=find(v(:)<l+5);

B(r1)=255; B(r2)=0;


imshow(uint8(B));

% --------------------------------------------------------------------

function jubuyuzhi_Callback(hObject, eventdata, handles)

%局部阈值法

set(handles.axes2,'HandleVisibility','ON');

axes(handles.axes2);

v=rgb2gray(handles.image);

imshow(v); R=zeros(size(v));

H = FSPECIAL('gaussian',9,2.4);

v = imfilter(v,H);

t=graythresh(v); t=t*255;

[c,l]=find( v(:)>t);

R(c)=1;


[x,y]=size(R); q=R;

for i=10:x-10

for j=10:y-10

if R(i,j)==0

t=[R(i-1,j-1),R(i-1,j),R(i-1,j+1),R(i,j-1),R(i,j+1),R(i+1,j-1),R(i+1,j),R(i+1,j+1)];

if sum(t)==0

q(i,j)=1;

end

end

end

end

figure, imshow(q,[]);


--------------------------------------------------------------------

function leijianzuidajuli_Callback(hObject, eventdata, handles)

%类间最大法

set(handles.axes2,'HandleVisibility','ON');

axes(handles.axes2);

X=rgb2gray(handles.image);

[r,c]=size(X);

figure (1)

subplot(1,2,1)

imshow(X)

R=zeros(1,256);

for i=50:150

Xi0=X0<=i;

N0=sum(sum(Xi0));

Xm0=X0(Xi0);

u0=sum(Xm0)/N0;

Xi1=X0>i;

N1=sum(sum(Xi1));

Xm1=X0(Xi1);

u1=sum(Xm1)/N1;

R(i+1)=(u1-i)*(i-u0)/((u1-u0)^2);

end

Th=find(R==max(R(51:151)))-1


X2=zeros(r,c);

for i=1:r

for j=1:c

X2(i,j)=X0(i,j)>Th;

end

end


subplot(2,2,2)

imshow(X2)


-----------------------------------------------------------------

%颜色空间转化

--------------------------------------------------------------------

function hsv_Callback(hObject, eventdata, handles)

%RGB转HSV

set(handles.axes2,'HandleVisibility','ON');

axes(handles.axes2);

hv=rgb2hsv(handles.image);

subplot(2,2,1);

imshow(hv);

title('RGBHSV');

%RGB=reshape(ones(64,1)*reshape(jet(64),1,192),[64,64,3]);

H=hv(:,:,1);

S=hv(:,:,2);

V=hv(:,:,3);

subplot(2,2,2);

imshow(H) ;

title('§§');

subplot(2,2,3);

imshow(S);

title('§§');

subplot(2,2,4);

imshow(V);

title('§§');

--------------------------------------------------------------------

function HIS_Callback(hObject, eventdata, handles)

%RGB转HSI

set(handles.axes2,'HandleVisibility','ON');

axes(handles.axes2);

W=im2double(handles.image);%获得double型的图形矩阵

[m,n,q]=size(W);

R=W(:,:,1);

G=W(:,:,2);

B=W(:,:,3);

% 改变通道来观察图像

H=zeros(m,n);

S=H;

for i1=1:m

for i2=1:n

numerator=0.5*(R(i1,i2)-G(i1,i2)+R(i1,i2)-B(i1,i2));

denominator=sqrt((R(i1,i2)-G(i1,i2))^2+(R(i1,i2)-B(i1,i2))*(G(i1,i2)-B(i1,i2)));

theta=acos(numerator/denominator)*180/pi;

if(B(i1,i2)<=G(i1,i2))

H(i1,i2)=theta;

else

H(i1,i2)=360-theta;

end

min1=min(R(i1,i2),G(i1,i2));

min1=min(B(i1,i2),min1);

S(i1,i2)=1-3/(R(i1,i2)+G(i1,i2)+B(i1,i2))*min1;

end

end

I=(R+G+B)/3;

figure,subplot(1,3,1),imshow(H,[]),title('色度图H');

set(gcf,'outerposition',get(0,'screensize'));

set(gcf,'NumberTitle','off','Name','HSI通道图像');

subplot(1,2,2),imshow(S),title('饱和度图S');

subplot(1,2,3),imshow(I),title('强度图I');


% -----------------------------------------------------------------

%其他图像处理

---------------------------------------------------------------------------

function fly_Callback(hObject, eventdata, handles)

%傅里叶变化

set(handles.axes2,'HandleVisibility','ON');

axes(handles.axes2);

[m,n]=size(handles.image);

d=zeros(m,n);

d(60:100,60:100)=1;

w=fft2(d);

w1=fftshift(w);

[sx,sy]=size(d);

subplot(2,2,1); imshow(d);

subplot(2,2,2); imshow(abs(w1));


for i=1:sx

t= fft(d(i,:));

len=length(t)/2;

F1(i,:)=[(t(len+1:end)),t(1:len)];

end

for i=1:sy

F2=fft(F1(:,i));

len=length(F2)/2;

F(:,i)=[(F2(len+1:end));F2(1:len)];

end

subplot(2,2,3);

imshow(abs(F1));

subplot(2,2,4);

imshow((abs(F)));




function ruihua_Callback(hObject, eventdata, handles)

%锐化

k=2;

h1=[-1 0 1;-k 0 k;-1 0 1];

h2=[1 k 1;0 0 0;-1 -k -1];

set(handles.axes2,'HandleVisibility','ON');

axes(handles.axes2);

I=rgb2gray(handles.image);

subplot(121);imshow(I);

J1(:,:)=conv2(I(:,:),h1);

J2(:,:)=conv2(I(:,:),h2);

J=abs(J1)+abs(J2);

subplot(122);

imshow((J),[0 255]);

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值