Автоматическая обрезка картинок - PullRequest
1 голос
/ 29 марта 2011

У меня есть много фотографий, которые сделаны из объекта с черным фоном. Я создал их с помощью Matlab, и у всех них есть белый «лишний», окружающий картину. Я хочу иметь возможность автоматически обрезать их, чтобы на изображении не было белого лишнего.

Файлы .tif, формат

Вот изображение в качестве примера: enter image description here

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

1 Ответ

2 голосов
/ 29 марта 2011

Вы можете просто выбросить строки и столбцы, в которых у вас есть только те.

%# read the image
[img,map] = imread('http://i.stack.imgur.com/Yyz8Z.png');

%# keep only rows/cols that have values other than 1
img = img(any(img<1,2),any(img<1,1));

Для RGB TIFF вы можете использовать (при условии, что максимальное значение на изображении TIFF равно 86, как в png)

img = img(~all(all(img==max(img(:)),3),2),~all(all(img==max(img(:)),3),1),:);

РЕДАКТИРОВАТЬ

Есть несколько способов убедиться, что вы не получите границу. Например, если вы хотите сохранить массив изображений RGB размером M × N × 3, вы можете использовать IMWRITE для записи

imwrite(imageArray,'myFile.tif')

Альтернативно, если у вас есть фигура, которую вы хотите сохранить без рамки, вы можете вызвать GETFRAME на дескрипторе осей, чтобы получить изображение:

axesHandle = gca; %# to get the axes handle of the current figure
f = getframe(axesHandle);
imwrite(f.cdata,'myFile.tif'); 

Если вы хотите сохранить свою фигуру с помощью сглаживания, вы можете использовать отличный export_fig из файлового обмена.

...