继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

图像边缘检测,轮廓拟合

牛魔王的故事
关注TA
已关注
手记 196
粉丝 111
获赞 628

在边缘检测中总会提取出不连续点,或伪轮廓。在这种情况下需要拟合出目标的轮廓,这样可以找到轮廓的数学表达式为后续的特征选取打下基础。博主用coins图像为例,用椭圆方程进行拟合,做出如下实验。

1、原图二值化

2、边缘检测(sobel算子)

3、填补孔洞

4、标记连通域

5、找到每个连通域坐标

6、用每个连通域坐标拟合出椭圆方程

7、在二值图像中画出每个椭圆函数

  1. %%图像边缘检测和拟合轮廓  

  2. clc  

  3. clear  

  4. close all  

  5. %% 读取图像  

  6. I = imread('coins.png');  

  7. I = im2bw(I);                                   %二值化  

  8. I = imfill(I,'holes');                          %填补孔洞  

  9. [M,N] = size(I);  

  10. figure(1),imshow(I);title('原图');hold on  

  11. %% 选取待拟合坐标  

  12. % conicP = ginput(15);              

  13. bw1 = edge(I,'sobel');                           %边缘检测  

  14. figure(2),imshow(bw1);title('边缘检测');  

  15. [L,num] = bwlabel(bw1);                           %标签  

  16. for i = 1:num  

  17.     [row,col] = find(L == i);  

  18.     conicP = zeros(length(row),2);  

  19.     conicP(:,1) = col;  

  20.     conicP(:,2) = row;  

  21.     figure(1),plot(conicP(:,1)', conicP(:,2)', 'xr');     %drawing sample points  

  22. %% 自定义椭圆函数拟合  

  23.     a0 = [1 1 1 1 1 1];  

  24.     f = @(a,x)a(1)*x(:,1).^2+a(2)*x(:,2).^2+a(3)*x(:,1).*x(:,2)+a(4)*x(:,1)+a(5)*x(:,2)+a(6);%建立方程  

  25.     p = nlinfit(conicP , zeros(size(conicP, 1), 1), f,[1 2 3 4 5 6]);  

  26.     syms x y  

  27.     conic = p(1)*x^2+p(2)*y^2+p(3)*x*y+p(4)*x+p(5)*y+p(6);  

  28. %% 在原图上显示拟合结果  

  29.     c = ezplot(conic,[0,N],[0,M]);  

  30.     figure(1),set(c, 'Color', 'Blue','LineWidth',2);  

  31.      

  32. end  

  33.  hold off  

实验结果图像如下,拟合结果为蓝线,原坐标为红点

原文出处

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP