gpt4 book ai didi

matlab - 仅水平垂直线

转载 作者:行者123 更新时间:2023-12-04 03:14:37 26 4
gpt4 key购买 nike

我是 matlab 的新手。我有一个图像 block ,如下图所示: enter image description here

白色显示其值等于 1 的像素,黑色显示其值等于 0 的像素,

我想得到只有垂直线。这意味着应删除水平线,如下图所示:

enter image description here

我还想获得水平线。这意味着应该删除垂直线,如下图所示:

enter image description here

如何在 Matlab 中完成?为此,我更喜欢形态学操作。

最佳答案

假设你的图片是BW如下:

% detecting all connected regions:
B = bwboundaries(BW,4);

这会生成一个单元格数组 B,其中包含所有“补丁”,这些补丁是通过连接相邻单元格而形成的,这些单元格的值为 1,从 4 条边之一连接,即不在对角线上。

B = 
[11x2 double]
[ 2x2 double]
[ 3x2 double]
[ 3x2 double]
[ 2x2 double]
[ 3x2 double]
[ 2x2 double]
[ 2x2 double]
[ 3x2 double]
[ 3x2 double]
[ 2x2 double]
[11x2 double]

例如:

>> B{6}
ans =
3 7
3 8
3 7

每一行是一个单元格坐标。第一列是它的行,第二列是它的列,第一个和最后一个单元格总是相同的。

现在我们需要遍历 B 中的单元格,找出其中哪些是直线,水平的还是垂直的,并将它们保存到新矩阵中。

% matrices for horizontal and vertical lines:
BWh = zeros(size(BW)); % horizontal lines
BWv = zeros(size(BW)); % vertical lines
for k = 1:numel(B)
% if the coordinates changes ONLY vertically:
% a vertical line is where all the coulmn indecies are the same
% and there are different row indices
if all(B{k}(1,2)==B{k}(:,2)) && B{k}(1,1)~=B{k}(2,1)
BWv(sub2ind(size(BW),B{k}(:,1),B{k}(:,2))) = 1;
end
% if the coordinates changes ONLY horizontaly:
% a vertical line is where all the row indecies are the same
% and there are different column indices
if all(B{k}(1,1)==B{k}(:,1)) && B{k}(1,2)~=B{k}(2,2)
BWh(sub2ind(size(BW),B{k}(:,1),B{k}(:,2))) = 1;
end
end
subplot 131
imagesc(BWh)
title('Horizontal lines')
subplot 132
imagesc(BWv)
title('Vertical lines')

“对角线边缘”是我们排除线后剩下的,所以我们可以只寻找我们目前没有找到的东西:

subplot 133
imagesc(BW & ~BWv & ~BWh)
title('Diagonal edges')
colormap 'gray'

BWvh

此方法将忽略任何不是单格粗线的内容,例如,下图中中间的正方形将仅以对角线边缘模式显示:

box demo

关于matlab - 仅水平垂直线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42185373/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com