能否编写一个用matlab实现的基于Roberts算子的图像边缘检测程序?

2024-11-23 10:25:13
推荐回答(2个)
回答(1):

clear; fid=fopen('d:\image\Lena.img','r'); %打开无格式文件 data1=(fread(fid,[256,256],'uint8'))'; subplot(2,3,1),imagesc(data1); colormap(gray); title('悔岩此LENA','Color','r'); subplot(2,3,2); data2=uint8(data1); R=edge(data2,'Roberts'); imagesc(R); title('Roberts检测算子'); subplot(2,3,3); data2=uint8(data1); Q=edge(data2,'Prewitt'); imagesc(Q); title('Prewitt检测算子'); subplot(2,3,4); data2=uint8(data1); S=edge(data2,'Sobel'); imagesc(S); title('Sobel检测算碧迅子'); subplot(2,3,5); data2=uint8(data1); T=edge(data2,'Log'枣稿); imagesc(T); title('Log检测算子'); Matlab中运行过的 正确的!

回答(2):

I=imread('ai.png'); %读取图像
I1=im2double(I); %将彩图序列变成双精度
I2=rgb2gray(I1); %将彩色图变成灰色图
[thr, sorh, keepapp]=ddencmp('den','wv',I2);
I3=wdencmp('gbl',I2,'sym4',2,thr,sorh,keepapp); %小波除噪
I4=medfilt2(I3,[9 9]); %中值滤波
I5=imresize(I4,0.2,'bicubic'); %图像大小
BW1=edge(I5,'sobel'); %sobel图像边缘提取洞橘衡
BW2=edge(I5,'roberts'); %roberts图像边缘提取
BW3=edge(I5,'prewitt'); %prewitt图像边缘提取
figure;
subplot(1,3,1);
imshow(BW1);
title('Sobel算子');
subplot(1,3,2);
imshow(BW2);
title('Roberts算子');
subplot(1,3,3);
imshow(BW3);
title('Prewitt算子'纳做);
亲伍渣测可行