如您所知我正在處理圖像,此時我正面臨以下問題,我不知道如何測量在我附加的圖像中觀察到的線的直徑,我可以應用一點定理的畢達哥拉斯,但我不知道是否有可能在圖像中做到這一點,例如在這種情況下圖像有粗線條,但如果線條比可以做的更薄?如何獲取圖像中線條的直徑?
我想知道時的直徑線是孤獨的,因爲很明顯,當有交叉的直徑會改變,我給它下一個形象。
如您所知我正在處理圖像,此時我正面臨以下問題,我不知道如何測量在我附加的圖像中觀察到的線的直徑,我可以應用一點定理的畢達哥拉斯,但我不知道是否有可能在圖像中做到這一點,例如在這種情況下圖像有粗線條,但如果線條比可以做的更薄?如何獲取圖像中線條的直徑?
我想知道時的直徑線是孤獨的,因爲很明顯,當有交叉的直徑會改變,我給它下一個形象。
下面是在分辨率和厚度「足夠大」簡單的黑客:要估計你可以做2件事情之一厚度
在上線給定點:
1)跨越了從該點的線在0和180之間的每個角度,發現導致與原來的線的最短重疊線,這將是厚度
2)跨越了從那一點開始,每當圓不再與該線重疊時,將其重新居中以具有完全重疊。如果不可能將其重新對中,以至於您完全重疊,那麼您仍然可以重疊的直徑是您對線厚度的最佳估計值
顯示線厚度估計值的一種方法是若要使用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
而這裏的選中了某個點的圖像(「指數」值近似直徑):
你實際上是試圖找到交點真的嗎?也許考慮骷髏和尋找交叉點,而不是跳線的厚度。 –