【问题标题】:MatLab: Corner Detection on Binary ImageMatLab:二值图像的角点检测
【发布时间】:2016-10-15 17:45:53
【问题描述】:

我正在尝试在 MatLab 中找到一种在此二进制图像上找到角点的方法

我一直在尝试找到一种方法来在此图像上拟合三角形并找到顶点。我试过找角,但它返回的值并不总是正确的。
有什么方法可以锐化边缘,以便角函数可以返回更好的结果?

感谢您的任何意见!谢谢!

哪种策略看起来更简单、更有效?我可以使用哪些现有的 MatLab 函数?

【问题讨论】:

  • 您要检测多少/哪些角?你能添加一张勾勒出边角的图片吗?
  • 应该有3个角,我已经在原始问题中添加了附件。
  • 有谁知道我检测三个角的方法吗?我一直在研究 houghline,但我不确定如何正确使用它。
  • 你是如何寻找角落的?请解释一下。
  • 我在 MatLab 中使用“角”函数来获得最佳的三个角。

标签: matlab computational-geometry rounded-corners matlab-cvst corner-detection


【解决方案1】:

让我们尝试一种更代数的方法,而不是图像处理方法。

您有白色像素 - 平面上的 2D 点,并且您希望找到三个半平面(直线),将这些点与平面的其余部分最好地分开。

那么,让我们开始吧

img=imread('http://i.stack.imgur.com/DL2Cq.png'); %// read the image
bw = img(:,:,1) > 128;  %// convert to binary mask
[y x] = find(bw);  %// get the x-y coordinates of white pixels
n=numel(x);  %// how many do we have

为了稳定性,我们减去所有点的平均值 - 以原点为中心的白色像素:

mm = mean([x y],1); 
mA = bsxfun(@minus, [x y], mm);

现在,一条线可以用两个参数来描述,所有满足L(1)*x + L(2)*y = 1的点(x, y)。为了找到一条所有点都严格在其一侧的线,这个不等式必须适用于集合中的所有点(x,y)L(1)*x + L(2)*y <= 1。我们可以强制这些不等式并使用quadprog 搜索满足此约束的最紧半平面L

L1 = quadprog(eye(2), -ones(2,1), mA, ones(n,1));
L2 = quadprog(eye(2), ones(2,1), mA, ones(n,1));
L3 = quadprog(eye(2), [1; -1], mA, ones(n,1));  

注意如何通过改变二次优化目标f,我们能够得到不同的半平面来分隔白色像素。

一旦我们有了三条线,我们就可以得到交点(将它们从原点移回mm):

x12=inv([L1';L2'])*ones(2,1)+mm';
x23=inv([L3';L2'])*ones(2,1)+mm';
x13=inv([L3';L1'])*ones(2,1)+mm';

您可以使用查看结果

imshow(bw,'border','tight'); 
hold all; 
%// plot the lines
ezplot(gca, @(x,y) L1(1)*(x-mm(1))+L1(2)*(y-mm(2))-1, [1 340 1 352]);
ezplot(gca, @(x,y) L2(1)*(x-mm(1))+L2(2)*(y-mm(2))-1, [1 340 1 352]);
ezplot(gca, @(x,y) L3(1)*(x-mm(1))+L3(2)*(y-mm(2))-1, [1 340 1 352]);
%// plot the intersection points
scatter([x12(1) x23(1) x13(1)],[x12(2) x23(2) x13(2)],50,'+r');

【讨论】:

  • 该代码在我拥有的一些图像上运行良好,但如果我给它某些像这样的图像,它似乎会遇到一些问题:imgur.com/qqg3cKS 有什么办法解决这个问题吗?
  • @user3315340 在quadprog(第二个参数)中使用f 术语会产生不同的解决方案,因为您发送L3 = quadprog(eye(2), [-1; 1], mA, ones(n,1)); 的图像会产生所需的解决方案。
【解决方案2】:

你可以找到最小面积的外接三角形。

首先计算 blob 的凸包。

然后尝试船体三个边的所有不同选择,通过计算成对交点来扩展边,并保持正面积最小的三角形。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多