извлекать упорядоченные точки из линий - PullRequest
1 голос
/ 18 марта 2020

У меня есть изображение bw, состоящее из линий, и я пытаюсь извлечь из него «критические» точки. То есть я пытаюсь извлечь упорядоченный список точек, чтобы при соединении соседних точек было возвращено что-то близкое к исходному входу.

Сначала я попытался определить углы, используя C = corner(I) и варианты. Эти обнаруженные хорошие моменты, однако, были неупорядоченными, поэтому я не выполнил sh того, что искал.

В настоящее время у меня есть фрагмент кода, который дает мне упорядоченный список, но не выделяет достаточно точек, чтобы описать изображение. Прикрепленный образец изображения и код:

I = imbinarize(rgb2gray(imread('rightRaw.png'))); % Read image ad convert to binary

J = padarray(I, [1, 0], 1, 'post'); % Insert row of ones at the bottom

J = imfill(J, 'holes'); % Fill inner pixels.
J(end, :) = J(end, :) & J(end-1, :); % Keep only the closing line at the bottom 

% Get X,Y coordinates of all white points 
[Y, X] = find(J > 0);

% Get boundary of the set of points
k = boundary(X, Y);

% Get x,y coordinates of the boundary
x = X(k);
y = Y(k);

% Remove coordinated of bottom line
x = x(y < size(J, 1));
y = y(y < size(J, 1));

Результат выглядит следующим образом (линия в белом, точки в синем) enter image description here

Как вы можете видите, соединение соседних точек не будет хорошо описывать изображение. Я считаю, что проблема в том, что я использую boundary. Есть ли способ сохранить информацию обо всех ребрах, чтобы я также получил внутренние линии? Возможно, внутри них будет несколько фигур и линий.

Я хочу, чтобы те же самые точки были получены с помощью corner, но с сохранением порядка.

Вот копия моего оригинала:

enter image description here

@ стакан:

enter image description here

...