matlab 获取图像轮廓两种方法

2025-10-08 10:37:07

1、matlab中有提取图形轮廓的函数bwperim。

但其只针对二值图像,所以需要先对灰度图像进行二值化,选定合适的阈值进行二值化。

I = imread('1.jpg');BW = im2bw(I,0.4);BW2 = bwperim(BW,8);

显示图像:

subplot(1,2,1);imshow(I);title('original iamge');subplot(1,2,2), imshow(BW2);title('bwperim');

matlab 获取图像轮廓两种方法

2、由上图可以看出,这个函数的局限性在于, 它不仅提取外轮廓, 对图形区域内部的孔洞所围成的内部边缘也提取出来。如果想只得到外形轮廓,则需要先进行填洞操作,后进行膨胀操作,去除孔、洞。填洞为imfill。

IBW = ~BW;F1 = imfill(IBW,'holes');SE = ones(3);F2 = imdilate(F1,SE,'same');BW3 = bwperim(F2);

显示图像:

subplot(1,2,1);imshow(I);title('original iamge');subplot(1,2,2), imshow(BW3);title('operated bwperim'); 

matlab 获取图像轮廓两种方法

3、这种方法具有一定局限性和优点,可根据个人的具体需要合理使用。

下面介绍一下另一种方法,也是较为常用的方法:edge。

1、edge方法适用于灰度图像。

edge的语法较为简单。

Bw = edge(I,‘methodname’)。

第一个参数为要提取轮廓的图像,第二个参数为使用的算子。

不同算子提取出来的效果略有不同。

第一种:SOBEL算子。

I=imread('lena.bmp');%  提取图像BW1=edge(I,'sobel'); %用SOBEL算子进行边缘检测

显示图像:

figure;

subplot(1,2,1), imshow(I);title('original image');subplot(1,2,2), imshow(BW1);title('sobel');

matlab 获取图像轮廓两种方法

2、第二种:Roberts算子。

I=imread('lena.bmp');%  提取图像

BW2=edge(I,'roberts');%用Roberts算子进行边缘检测

显示图像:

figure;subplot(1,2,1), imshow(I);title('original image');subplot(1,2,2), imshow(BW2);title('roberts');

matlab 获取图像轮廓两种方法

3、第三种:prewitt算子。

I=imread('lena.bmp');%  提取图像

BW3=edge(I,'prewitt'); %用prewitt算子进行边缘检测

显示图像:

figure;subplot(1,2,1), imshow(I);title('original image');subplot(1,2,2), imshow(BW3);title('prewitt');

matlab 获取图像轮廓两种方法

4、第四种:log算子。

I=imread('lena.bmp');%  提取图像

BW4=edge(I,'log'); %用log算子进行边缘检测

显示图像:

figure;subplot(1,2,1), imshow(I);title('original image');subplot(1,2,2), imshow(BW4);title('log');

matlab 获取图像轮廓两种方法

5、第五种:canny算子。

I=imread('lena.bmp');%  提取图像

BW5=edge(I,'canny'); %用canny算子进行边缘检测

显示图像:

figure;subplot(1,2,1), imshow(I);title('original image');subplot(1,2,2), imshow(BW5);title('canny');

matlab 获取图像轮廓两种方法

6、我们也可以将图像加上噪音然后进行提取,加了噪声之后的图像的轮廓要更加杂乱。

第六种:加噪音提取。

I=imread('lena.bmp');%  提取图像

h=fspecial('gaussian',5);BW6=edge(I,'canny');

显示图像:

figure;subplot(1,2,1), imshow(I);title('original image');subplot(1,2,2), imshow(BW6);title('gasussian&canny');

matlab 获取图像轮廓两种方法

1、以上就是提取图像轮廓常用的方法,根据需要选择合适的方法才能有更好的效果。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢