如何获得图像中线条的直径?

时间:2017-05-14 06:55:19

标签: image matlab line

如你所知,我正在处理图像,此时我面临以下问题,我不知道如何测量我附加的图像中观察到的直线的直径,我可以应用一点毕达哥拉斯定理,但我不知道是否可以在图像中进行,例如在这种情况下图像有粗线,但如果线条比可以做的更薄?

Example image

我想知道线条单独时的直径,因为很明显当有一个十字架直径会改变时,我会在下一张图片中显示它。

diameter

2 个答案:

答案 0 :(得分:2)

以下是分辨率和厚度足够大的简单黑客":

在您要估算厚度的线上的给定点,您可以执行以下两项操作之一:

1)在0到180之间的每个角度从该点跨越一条线并找到导致与原始线最短重叠的线,它将是厚度

2)从该点开出一个圆圈,每当圆圈不再与线重叠时,重新居中以完全重叠。当不可能重新对中它以使你有完全重叠时,你仍然设法重叠的直径是你对线厚度的最佳估计

答案 1 :(得分:1)

显示线条粗细估计值的一种方法是使用bwdist计算线条中每个点到最近边缘的距离,然后使用imdilate平滑最大值(运行沿着线的中心)穿过线的宽度。然后,您可以在线上选择一个点来查看其近似直径(在直径之间的过渡处稍微偏离,如在连接处)。这是一个例子:

img = imread('qGs5t.png');            % Load RGB image
bw = ~im2bw(img);                     % Convert to black and white and invert
bw = imclose(bw, strel('disk', 3));   % Morphological close to remove noise
distImage = bwdist(~bw);              % Distance transform
maxDist = double(max(distImage(:)));  % Find maximum distance measure
diamImage = 2.*bw.*imdilate(distImage, strel('disk', floor(maxDist)));  % Dilate and mask

imagesc(diamImage);            % Display image
colorbar;                      % Display color bar
dcmObj = datacursormode(gcf);  % Create data cursor object...
set(dcmObj, 'Enable', 'on');   % ... and enable to select points

这是选择了一个点的图像(“索引”值是近似直径):

enter image description here