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