У меня есть изображение 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));
Результат выглядит следующим образом (линия в белом, точки в синем)
Как вы можете видите, соединение соседних точек не будет хорошо описывать изображение. Я считаю, что проблема в том, что я использую boundary
. Есть ли способ сохранить информацию обо всех ребрах, чтобы я также получил внутренние линии? Возможно, внутри них будет несколько фигур и линий.
Я хочу, чтобы те же самые точки были получены с помощью corner
, но с сохранением порядка.
Вот копия моего оригинала:
@ стакан: