matlab - 如何从图像矩阵中检测边缘
问题描述
我想找到检测给定矩阵边缘的最佳方法,然后在 MATLAB 上编写算法来检测边缘。
a=[
1 1 1 1 1 1 1 1 1
1 100 100 100 100 100 100 1 1
1 100 100 100 100 100 100 1 1
1 100 100 1 1 100 100 1 100
1 100 100 1 1 100 100 1 1
1 100 100 100 100 100 100 1 1
1 100 100 100 100 100 100 1 1
1 100 100 1 1 1 1 1 1
1 100 100 1 80 1 1 1 90
]
我试过'Sobel'、'Prewitt'、'Roberts'、'log'、'zerocross'和'Canny'
解决方案
首先,您可以对图像进行二值化,因为在这种情况下,它们似乎是背景图像。一种可能的解决方案是循环遍历每个元素,如果该元素是图像的一部分,则如果其至少一个相邻元素是背景,则将其添加到边缘。
我在下面附上了此操作的代码:
a=[
1 1 1 1 1 1 1 1 1
1 100 100 100 100 100 100 1 1
1 100 100 100 100 100 100 1 1
1 100 100 1 1 100 100 1 100
1 100 100 1 1 100 100 1 1
1 100 100 100 100 100 100 1 1
1 100 100 100 100 100 100 1 1
1 100 100 1 1 1 1 1 1
1 100 100 1 80 1 1 1 90
];
a(a ~= 1) = 0;
a = ~a;
[x,y] = ind2sub(size(a),find(a));
edges = [];
for i = 1:length(x)
[nx, ny] = meshgrid(x(i)-1:x(i)+1, y(i)-1:y(i)+1);
n = [nx(:) ny(:)];
n(n(:,1) == 0 | n(:,1) == size(a,1)+1 | n(:,2) == 0 | n(:,2) == size(a,2)+1,:) = [];
b = sub2ind(size(a),n(:,1),n(:,2));
all_neighbors = a(b);
if ( a(x(i),y(i)) == 1 && sum(all_neighbors) ~= length(all_neighbors))
edges = [edges sub2ind(size(a),x(i),y(i))];
end
end
推荐阅读
- android - 自定义 NavController 和自定义 NavHost
- python - 瓶子返回响应非常缓慢
- php - 将多维数组拆分为多个数组
- javascript - javacsript中字符串中的正则表达式数学双引号字符串是什么?
- excel - 检测excel气泡图气泡是否重叠或确定确切的气泡大小
- python-2.7 - 多处理和作为输出的列表返回错误:分配前引用的局部变量“”
- javascript - 如何使用 onClick 为同一个按钮设置多个功能?
- javascript - 将字符串变量传递给 JavaScript 函数
- mysql - Group By查找SQL中表元素之间的差异?
- swift - 仅检测到一次碰撞