求用Matlab进行边缘检测

求用Matlab进行边缘检测,第1张

clear

all

close

all

warning

off

all

I

=

imread('lena.bmp')

%%如果是其他类型图像,请先转换为灰度图

%%没有噪声时的检测结果

BW_sobel

=

edge(I,'sobel')

BW_prewitt

=

edge(I,'prewitt')

BW_roberts

=

edge(I,'roberts')

BW_laplace

=

edge(I,'log')

BW_canny

=

edge(I,'canny')

figure(1)

subplot(2,3,1),imshow(I),xlabel('原始图像')

subplot(2,3,2),imshow(BW_sobel),xlabel('sobel检测')

subplot(2,3,3),imshow(BW_prewitt),xlabel('prewitt检测')

subplot(2,3,4),imshow(BW_roberts),xlabel('roberts检测')

subplot(2,3,5),imshow(BW_laplace),xlabel('laplace检测')

subplot(2,3,6),imshow(BW_canny),xlabel('canny检测')

%%加入高斯噪声(μ=0,σ^2=0.01)检测结果

I_g1

=

imnoise(I,'gaussian',0,0.01)

BW_sobel

=

edge(I_g1,'sobel')

BW_prewitt

=

edge(I_g1,'prewitt'脊竖)

BW_roberts

=

edge(I_g1,'roberts')

BW_laplace

=

edge(I_g1,'log')

BW_canny

=

edge(I_g1,'canny')

figure(2)

subplot(2,3,1),imshow(I_g1),xlabel('加入高斯噪声(μ=0,σ^2=0.01)图像')

subplot(2,3,2),imshow(BW_sobel),xlabel('sobel检测')

subplot(2,3,3),imshow(BW_prewitt),xlabel('prewitt检测')

subplot(2,3,4),imshow(BW_roberts),xlabel('roberts检测')

subplot(2,3,5),imshow(BW_laplace),xlabel('laplace检测')

subplot(2,3,6),imshow(BW_canny),xlabel('canny检测')

%%加入高斯噪声(μ=0,σ^2=0.02)检测结果

I_g2

=

imnoise(I,'gaussian',0,0.02)

BW_sobel

=

edge(I_g2,'sobel')

BW_prewitt

=

edge(I_g2,'prewitt')

BW_roberts

=

edge(I_g2,'roberts')

BW_laplace

=

edge(I_g2,'log')

BW_canny

=

edge(I_g2,'canny')

figure(3)

subplot(2,3,1),imshow(I_g2),xlabel('加入高斯噪声仔卜(μ=0,σ^2=0.02)图像')

subplot(2,3,2),imshow(BW_sobel),xlabel('sobel检测')

subplot(2,3,3),imshow(BW_prewitt),xlabel('prewitt检测')

subplot(2,3,4),imshow(BW_roberts),xlabel('roberts检测')

subplot(2,3,5),imshow(BW_laplace),xlabel('樱戚大laplace检测')

subplot(2,3,6),imshow(BW_canny),xlabel('canny检测')

f就是你导扮乱入的rgb图片。

首先按照上面的代码建立一个.m文件,将文件存盘,命名为 colorgrad.m

然后在matlab命令窗肢缺绝口输入历姿如下命令:

>>f=imread('test.jpg') %这里的test.jpg是图片文件名

>>[VG,A,PPT]=colorgrad(f,0)

>>figureimshow(PPT)

你可以试试下面的程序:

I=imread('myphoto.jpg') % 假设要处理的图像是myphoto.jpg

heights=size(I,1) % 图像的高

widths=size(I,2) % 图像的宽

m=8% 假设纵向分成8幅图

n=10% 假设横向分成10幅图

% 考虑到rows和cols不一定能被m和n整除,所以对行数和列数均分后要取整

rows=round(linspace(0,heights,m+1))% 各子图像的起始和终止州伏行标

cols=round(linspace(0,widths,n+1))% 各子图像的起始和终止列标

blocks=cell(m,n) % 用一个单元数组容纳各个子图像

for k1=1:m

for k2=1:n

blocks{k1,k2}=I(rows(k1)+1:rows(k1+1),cols(k2)+1:cols(k2+1),:)

subimage=blocks{k1,k2}

% 以下是对subimage进行伍迹乎边缘检测

% 加入边缘检测的代码

% 以上是对subimage进行边缘检测

blocks{k1,k2}=subimage

end

end

processed=I% processed为处理后的图像,用原图像对其初始化

% 以下为拼接图像

for k1=1:m

for k2=1:n

processed(rows(k1)+1:rows(k1+1),cols(k2)+1:cols(k2+1),:)=blocks{k1,k2}

end

end

figure,imshow(processed)

% 以上的程序已测试过,对灰度图像腔悉和真彩图像都可以运行。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12480321.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存