Как я могу узнать, где находится центриод на сетчатом изображении в MATLAB? - PullRequest
1 голос
/ 20 мая 2019

Надеюсь, это изображение поможет. Я взял изображение с камеры и создал на нем сетки. Как я могу узнать, в какой сетке присутствует мой центроид? Мне нужно сгенерировать переменную или число, которое я могу использовать в дальнейшем. Например, центроид находится в третьем окне, он генерирует 3, и я могу отправить его в Arduino, используя последовательную связь для дальнейших действий. Я надеюсь, вы поняли идею. Может ли в этом случае быть полезен ROI, если да, то как я могу его использовать?

Центроид и ограничивающий прямоугольник уже сформированы в изображении используя этот код.

    stat = regionprops(Ibw1, 'Centroid', 'BoundingBox')
hold on
for x=1:numel(stat)

  rectangle('Position',stat(x).BoundingBox,'EdgeColor','r','LineWidth',1);

    plot(stat(x).Centroid(1),stat(x).Centroid(2),'r*');

end
hold off

После этого я использовал этот код для создания сеток для изображения.

[rows, columns, ~] = size(I);
for row = 1 : 52 : rows
  line([1, columns], [row, row], 'Color', 'r');
end
for col = 1 : 53 : columns
  line([col, col], [1, rows], 'Color', 'r');
end

1 Ответ

0 голосов
/ 21 мая 2019

Если вы хотите получить номера строк и столбцов сетки, вы должны построить сетку с предварительно заданной строкой сетки и шириной столбца:

rowWidth = 52; % Grig row width in pixels
colWidth = 53; % Grig column width in pixels
[rows, columns, ~] = size(I);
for row = 1 : rowWidth : rows
    line([1, columns], [row, row], 'Color', 'r');
end
for col = 1 : colWidth : columns
    line([col, col], [1, rows], 'Color', 'r');
end

Чтобы получить номера строк и столбцов сетки (при условии, что у вас только один центроид):

% Get the row and column of the centroid (in grid units) 
centroidGridCol = ceil(stat(1).Centroid(1) / colWidth);
centroidGridRow = ceil(stat(1).Centroid(2) / rowWidth);

Чтобы увидеть, что это правильно, вы можете рассчитать ограничивающую рамку сетки на графике:

% Get the bounding box of the grid containing the centroid (in pixel units)
centroidGridBox(1) = (centroidGridCol - 1) * colWidth;
centroidGridBox(2) = (centroidGridRow - 1) * rowWidth;
centroidGridBox(3) = colWidth;
centroidGridBox(4) = rowWidth;

% Plot the bounding box of the grid containing the centroid
hold on
rectangle('Position',centroidGridBox ,'EdgeColor','g','LineWidth',1);
hold off

Вы можете построить строку и столбец сетки в виде текста рядом с центроидом:

% Plot the grid row and column next to the centroid
text(stat(1).Centroid(1),stat(1).Centroid(2),...
    ['(' num2str(centroidGridCol), ', ', num2str(centroidGridRow) ')'],...
    'color','b')

enter image description here

...