Нарисуйте прямоугольник над объектом с помощью Matlab

#matlab #image-processing #plot #image-segmentation

#matlab #обработка изображений #построение #сегментация изображения

Вопрос:

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

Комментарии:

1. это двоичное изображение? т. Е. те, где монета, и нули в другом месте? или его можно преобразовать в один?

2. @R. M. исходное изображение — цветное, и у меня также есть двоичная версия этого изображения.

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

Ответ №1:

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

 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
  

введите описание изображения здесь

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

 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
  

Результат:

введите описание изображения здесь

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

Ответ №2:

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

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

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

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