Вычислить толщину двоичной линии в нормальном направлении - PullRequest
1 голос
/ 04 июля 2019

Я бы хотел попросить вас помочь с определением толщины линии.У меня есть бинарная кривая.Мне нужно выяснить расстояние каждой точки скелета кривой до края линии в направлении нормали.Итак, я сначала вычислил скелет бинарной кривой.Следовательно, для каждого пикселя скелета я вычисляю нормаль.Эта ситуация изображена на рисунке, показывая скелет и карту нормальных векторов от каждого пикселя.В этом пункте я не знаю, как вычислить расстояние для каждого пикселя скелета до края кривой в нормальном направлении.На практике мне нужно посчитать количество пикселей (логическая 1) от пикселей скелета до края линии в нормальном направлении.Это означает, что мне нужно получить вектор, содержащий расстояние для каждой точки скелета.Я хотел бы заранее поблагодарить вас за вашу помощь.

Код для генерации скелета с нормалями:

clc;clear all;close all
i=rgb2gray(imread('Bin_Lines.bmp'));

BW=bwskel(logical(i));

% BW = image sceleton

Orientations = skeletonOrientation(BW,5); %5x5 box
Onormal = Orientations+90; %easier to view normals
Onr = sind(Onormal); %vv
Onc = cosd(Onormal); %uu
[r,c] = find(BW);    %row/cols
idx = find(BW);      %Linear indices into Onr/Onc

figure()
imshow(BW,[]);
%Plotting normals of binary skeleton
hold on
quiver(c,r,-Onc(idx),Onr(idx));

Вот ссылка, где я храню исходные коды и изображение двоичной строки:

https://www.dropbox.com/sh/j84ep3k1604hsza/AABm92TUBX6yIp29Gc0v_PHHa?dl=0

1 Ответ

5 голосов
/ 04 июля 2019

Вы можете использовать преобразование расстояния , чтобы вычислить расстояние каждого внутреннего пикселя до границы.Matlab может bwdist сделать это для вас.
Затем вы можете извлечь информацию для пикселей скелета.

img = rgb2gray(imread('Bin_Lines.bmp'));  
bw = bwskel(img > 128);
dst = bwdist(img <= 128);  % need opposite contrast
distance_of_skel_pixels_to_boundary = dst(bw)

Расстояние dst выглядит следующим образом:
enter image description here

...