Нарисуйте прямоугольник над объектом, используя Matlab - PullRequest
0 голосов
/ 07 апреля 2011

У меня есть изображение, которое содержит изображение монеты. Форма монеты может быть прямоугольником, квадратом, кругом, овалом и т. Д. Я хочу нарисовать прямоугольник поверх монеты и отрезать монету от фона. Я не могу дать x или y значения прямоугольника, так как монета может быть где угодно на изображении. Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

1 голос
/ 07 апреля 2011

Мой ответ ниже предполагает, что вы уже определили монету, и у вас есть очищенное изображение (двоичный файл было бы неплохо), с которым вы можете работать.

coin=load('penny.mat'); %#load matlab's stock image
img=zeros(256,256);
img(65:192,65:192)=coin.P;%# this is an approximation to the sort of image that I think you have

enter image description here

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

sideX=sum(sum(img,1)>0);
sideY=sum(sum(img,2)>0);

Найдите центроид изображения, используя kmeans.

[indX,indY]=ind2sub(size(img),find(img(:)>0));
[~,centroid]=kmeans([indX,indY],1);

Теперь, наконец, наложите прямоугольник поверх изображения.

imagesc(img);colormap(gray);hold on
rectangle('Position',([centroid,sideX,sideY]-[sideX,sideY,0,0]/2),'EdgeColor','w');hold off

Результат:

enter image description here

Если у вас есть шумное изображение (то есть, оно не равно нулю вне изображения, тогда вам нужно установить порог, чтобы найти ограничивающий прямоугольник)

0 голосов
/ 07 апреля 2011

Начните с чтения совета MathWorks по распознаванию образов . Как именно вы решите проблему, зависит от многих вещей, например

  • что еще на изображении кроме монеты?

  • Все ли монеты одного цвета или разных цветов?

  • Есть ли у вас тренировочный набор изображений с определенными местоположениями монет?

...