2015-01-28 5 views
-5

Учитывая изображение, где есть черный прямоугольник на белом фоне, как мы можем найти четыре угловых координаты прямоугольника в MATLAB? В частности, как мы находим верхние левые, верхние правые, нижние левые и нижние правые углы этого прямоугольника?Найти угловые координаты прямоугольника в MATLAB

+1

Что внутри прямоугольника? Какой тип координат? –

+2

Этот вопрос не ясен, ему нужны контекст - входные данные, код и описание проблемы с кодированием. Обратите внимание, что вы вряд ли получите ответ с помощью решения Matlab, если вы просто ставите проблему с программным обеспечением и не показываете свои собственные попытки, а также объясняйте, что конкретно не мешает вам выполнять свою работу самостоятельно. –

+0

внутри черного прямоугольника вы можете увидеть белый прямоугольник. как найти границу этого белого прямоугольника. Я хочу, чтобы эти координаты, чтобы найти положение номерного знака в изображении. – Ash

ответ

1

Предполагая, что изображение содержит только один объект, который представляет собой черный прямоугольник на белом фоне, и при условии, что ваше изображение logical, все, что вам нужно сделать, это найти координаты, которые все черные/false, то напишите код, который найдет минимальную ограничительную рамку, которая окружает эти точки. В частности, если вы найдете минимальные координаты строк и столбцов, это соответствует верхнему левому углу, и если вы найдете максимальные координаты строк и столбцов, это соответствует нижнему правому углу. Если вы хотите найти другие два угла (вверху справа и внизу слева), вам просто нужно определить ширину и высоту ограничивающего прямоугольника и добавить соответствующую координату в соответствующее измерение.

Предполагая, что ваш образ хранится в A, вы можете сделать что-то вроде этого:

[rows,cols] = find(~A); %// Step #1 

top_left_row = min(rows); %// Step #2 
top_left_col = min(cols); 
bottom_right_row = max(rows); 
bottom_right_col = max(cols); 

width = bottom_right_col - top_left_col + 1; %// Step #3 
height = bottom_right_row - top_left_row + 1; 

top_right_row = top_left_row; %// Step #4 
top_right_col = top_left_col + width; 

bottom_left_row = top_left_row + height; 
bottom_left_col = top_left_col; 

Приведенный выше код может быть разбит на четыре этапа:

Шаг № 1

Первый шаг заключается в использовании find на обратном изображения. Причина, почему вы делаете это, - это то, что вы хотите найти все черные и черные строки. Эти места хранятся в rows и cols.

Шаг № 2

Следующий шаг, чтобы найти минимальное и максимальное координаты строк и столбцов, что мы говорили раньше. Они соответствуют верхним левым и нижним правым углам прямоугольника.

Шаг № 3

Чтобы определить другие координаты, вам нужно знать ширину и высоту окна, и поэтому ширина может быть найдена просто вычитанием правый и левый столбец координат, а высота может можно найти, вычитая соответственно нижнюю и верхнюю координаты.

Шаг № 4

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


Таким образом, требуемые переменные называются в соответствии с тем, какой угол они лежат на прямоугольнике в приведенном выше коде.

Удачи вам!

+0

Ваш ответ был полезен. Но как рассчитать размер наклонного прямоугольника? Пример: http://imgur.com/a/OlgXC –

+0

@ RonaldAraújo Когда вы найдете ограничительную рамку прямоугольника, вы просто суммируете все пиксели, отличные от нуля. Ограничивающая коробка будет содержать нулевые пиксели и ненулевые пиксели, где нулевые пиксели соответствуют тем местам, которые не содержатся в вашем прямоугольнике, но необходимы для того, чтобы содержать ограниченный прямоугольник. Аналогично, ненулевые пиксели соответствуют только тем, которые принадлежат ограниченному прямоугольнику. Таким образом, вы можете найти размер по 'sz = nnz (A (top_left_row: bottom_right_row, top_left_col: bottom_right_col)); – rayryeng

+0

@ RonaldAraújo Кроме того, если у вас есть панель инструментов обработки изображений, изучите [' regionprops'] (https://www.mathworks.com/help/images/ref/regionprops.html) и указать атрибут ''Area'' для того, что нужно вернуть. – rayryeng

Смежные вопросы