Извлеките эллиптическую область и обрежьте ее вручную в Matlab.

У меня много изображений лиц, я хочу извлечь эллиптическую область из изображений вручную, обрезать и сохранить ее автоматически (например, imcrop, но не прямоугольник). Не могли бы вы помочь мне в этом?

Спасибо за вашу помощь


person user951487    schedule 16.07.2014    source источник
comment
В последней версии Computer Vision System Toolbox есть приложение для маркировки объектов на изображениях, но оно работает только с прямоугольниками. mathworks.com/help/vision/ уг/   -  person Dima    schedule 16.07.2014
comment
Возможный дубликат stackoverflow.com/questions/11079781 /   -  person beaker    schedule 16.07.2014
comment
Да, я знаю решение для прямоугольника, но мне нужен эллипс. Функция imellipse дает мне координаты? @Дима   -  person user951487    schedule 17.07.2014


Ответы (2)


Вы можете использовать функцию imellipse.

person Dima    schedule 16.07.2014

%This is what you would do after creating the mask to get the coordinates.

structBoundaries = bwboundaries(binaryImage);
xy=structBoundaries{1}; % Get n by 2 array of x,y coordinates.
x = xy(:, 2); % Columns.
y = xy(:, 1); % Rows.

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

[FileName,PathName] = uigetfile({'*.jpg;*.tif;*.png;*.gif','All Image Files'},'Please Select an Image');
image = imread([PathName FileName]); 
imshow(image) %needed to use imellipse
user_defined_ellipse = imellipse(gca, []); % creates user defined ellipse object.
wait(user_defined_ellipse);% You need to click twice to continue. 
MASK = double(user_defined_ellipse.createMask());
new_image_name = [PathName 'Cropped_Image_' FileName];
new_image_name = new_image_name(1:strfind(new_image_name,'.')-1); %removing the .jpg, .tiff, etc 
new_image_name = [new_image_name '.png']; % making the image .png so it can be transparent
imwrite(image, new_image_name,'png','Alpha',MASK);
msg = msgbox(['The image was written to ' new_image_name],'New Image Path');
waitfor(msg);
person Michael James Kali Galarnyk    schedule 24.10.2015