MATLAB中有几种算法可以对图像进行边缘提取,其中一种就是edge算法,这个edge算法中有好几个算子,每一个算子分别对应着一种边缘提取的原理,接下来就来看一下几种方法的异同
%读取一张图片,并显示original_picture=imread('D:SoftWarematlab2016aProjectPicturecat.jpg');Pic2=im2bw(original_picture,thresh);figure(1)subplot(2,2,1);imshow(original_picture);title('原始RGB图像')subplot(222)imshow(Pic2)title('二值化图像')%用edge算法对二值化图像进行边缘提取PicEdge1=edge(Pic2,'log');subplot(223);imshow(PicEdge1);title('log算子')PicEdge2 = edge(Pic2,'canny');subplot(224);imshow(PicEdge2);title('canny算子');PicEdge3=edge(Pic2,'sobel');figure(2)subplot(221)imshow(PicEdge3);title('sobel算子')PicEdge4=edge(Pic2,'prewitt');subplot(222)imshow(PicEdge4);title('sprewitt算子')PicEdge5=edge(Pic2,'zerocross');subplot(223)imshow(PicEdge5);title('zerocross算子')PicEdge6=edge(Pic2,'roberts');subplot(224)imshow(PicEdge6);title('roberts算子')
虽然我们从提取的结果来看,可能他们的差别不是很明显,但是这几个算子的基本原理还是有区别的,另外由于我采用的原始图片可能图中的猫和背景颜色有的部分很相似,所以会导致有些猫的边缘没有被提取出来,以后还需改善。