В этом примере показов, как сегментировать изображение и создать двухкомпонентное масковое изображение с помощью приложения Color Thresholder. Пример сегментирует передний план (перец) от фона (фиолетовое полотно) на основе значений цвета.
В приложении Color Thresholder сегментация изображений может быть итеративным процессом. Например, попробуйте сегментировать изображение в нескольких цветовых пространствах, поддерживаемых приложением, потому что одно цветовое пространство может изолировать конкретный цвет лучше, чем другое. В любом из поддерживаемых цветовых пространств можно сначала выполнить автоматическую сегментацию, выбрав область на переднем или заднем плане. Затем можно уточнить сегментацию с помощью элементов управления цветовыми компонентами, предоставляемых приложением.
В последней части этого примера показано, как сохранить результаты работы, создать изображение маски и получить код MATLAB ®, используемый приложением для выполнения сегментации.
Чтение цветного изображения в рабочую область.
rgb = imread('peppers.png');
Откройте приложение Color Thresholder с панели инструментов MATLAB. На вкладке Приложения, в разделе Обработка изображений и Компьютерное зрение, нажмите Color Thresholder.
Загрузите изображение в приложение Color Thresholder. Нажмите Load Image, а затем выберите Load Image from Workspace. В диалоговом окне Импорт из рабочей области выберите изображение из рабочей области и нажмите кнопку ОК.
Также можно открыть приложение из командной строки при помощи colorThresholder
функция, задающая имя изображения: colorThresholder(rgb);
. Можно также получить изображение Acquire Live Images в приложении Color Thresholder.
Приложение Color Thresholder отображает изображение на вкладке Choose a Color Space с облаками точек, представляющими изображение в этих цветовых пространствах: RGB, HSV, YCbCr и L * a * b *. Для основанной на цвете сегментации выберите цветовое пространство, которое обеспечивает лучшее разделение цветов. Используя мышь, поверните представления облака точек, чтобы увидеть, как они изолируют отдельные цвета. Сегментация с помощью приложения Color Thresholder может быть итеративным процессом - попробуйте несколько различных цветовых пространств, прежде чем достигнуть сегментации, отвечающей вашим потребностям. В данном примере запустите процесс, выбрав цветовое пространство YCbCr.
Когда вы выбираете цветовое пространство, приложение открывает новую вкладку, отображая изображение вместе с набором элементов управления для каждого цветового компонента и представления облака точек. Элементы управления цветом варьируются в зависимости от цветового пространства. Для цветового пространства YCbCr приложение Color Thresholder отображает три гистограммы, представляющие три цветовых компонента: Y-компонент представляет яркость, Cb-компонент представляет сине-желтый спектр, а Cr-компонент представляет красно-зеленый спектр.
Чтобы исследовать изображение, наведите курсор на изображение, чтобы получить доступ к элементам управления панорамированием и масштабированием.
Сначала сегментируйте изображение с помощью автоматического порогового значения. Поскольку цвет фона (фиолетовое полотно) близок к однородному цвету, сегментируйте его, а не объекты переднего плана (перец). Вы всегда можете инвертировать маску позже, используя опцию «Инвертировать маску».
Определите область с помощью инструмента freehand ROI. Нажмите кнопку в левом верхнем углу изображения и нарисуйте информация только для чтения на фоне. Можно рисовать несколько областей.
После рисования области приложение Color Thresholder автоматически порождает изображение на основе цветов, выбранных в области, которую вы нарисовали. Управление цветом Y, Cb и Cr изменяется, отражая сегментацию. Это автоматическое пороговое значение не создает чистой сегментации фона и переднего плана, особенно на нижней границе между передним и фоновым системами. В данном примере цвет фона легче у нижней части изображения. Если необходимо удалить область, которую вы нарисовали, и начать заново, щелкните правой кнопкой мыши в любом месте области и выберите «Удалить Freehand».
Для точной настройки автоматического порога используйте элементы управления цветом. Для каждого управления цветом Y, Cb и Cr можно задать область значений значений, перетащив нижнюю и верхнюю границы этой гистограммы. Используя эти элементы управления цветом, можно значительно улучшить сегментацию переднего плана.
Другой подход к сегментации изображения в цветовом пространстве YCbCr состоит в том, чтобы нарисовать информация только для чтения на облаке точек, чтобы выбрать область значений цветов.
На панели инструментов приложения щелкните Сбросить пороги, чтобы вернуться к оригинальному изображению. В нижней правой панели приложения щелкните и перетащите облако точек, чтобы повернуть, пока вы не изолируете представление цвета, которого вы заинтересованы в пороге. Нажмите кнопку в верхнем левом углу облака точек. Приложение Color Thresholder преобразует 3-D облако точек в представление 2-D и активирует инструмент многоугольника информации только для чтения. Нарисуйте информация только для чтения вокруг цвета, который вы хотите сегментировать (фиолетовый). Этот метод может создать лучшую сегментацию, чем начальный подход автоматического порога.
Чтобы сегментировать изображение в другом цветовом пространстве, щелкните Новое цветовое пространство на панели инструментов приложения. На вкладке «Выбор цветового пространства» выберите цветовое пространство HSV.
Приложение Color Thresholder создает новую вкладку, отображающую изображение и элементы управления цветовым компонентом для цветового пространства HSV. В этом цветовом пространстве H представляет оттенок, S представляет насыщение, а V представляет значение. Цветовое пространство HSV использует ручку двойного направления для компонента H и два ползунка гистограммы для компонентов S и V. Вкладка также содержит представление облака точек цветов в изображении.
Как и в предыдущей итерации, можно использовать все те же методы: автоматическое порогование и интерактивное использование элементов управления цветового компонента, включая облако точек. При использовании элементов управления цветом можно увидеть выполняемую сегментацию. На панели с элементом управления H измените область значений оттенка, нажав и перетащив по одной стреле. Экспериментируйте с элементами управления до тех пор, пока у вас не будет чистое отделение фона от переднего плана. Вы можете очистить небольшие недоделки после того, как создадите изображение маски с помощью функций тулбокса, таких как морфологические операторы.
В этой части примера показано, как создать масковое изображение после сегментации. Можно также получить сегментированное изображение и код MATLAB, используемый для создания маскировочного изображения.
Поскольку в примере сегментирован фон (фиолетовое полотно), а не объекты переднего плана (перцы), смените передний план и фон, нажав кнопку Инвертировать маску.
Просмотрите созданное вами двоичное изображение маски, нажав Показать двоичное на панели инструментов приложения.
Сохраните изображение маски в рабочей области. На панели инструментов маски нажмите кнопку Экспорта и выберите Экспорт Изображений.
В диалоговом окне «Экспорт в рабочую область» задайте имена переменных для двоичного маскировочного изображения. Можно также сохранить исходное входное изображение RGB и сегментированную версию оригинального изображения.
Чтобы сохранить код MATLAB, требуемый для воссоздания сегментации, нажмите кнопку Экспорта и выберите Экспорт функций. Приложение Color Thresholder открывает Редактор MATLAB с кодом, который создает сегментацию. Чтобы сохранить код, нажатие кнопки Сохранить на панели инструментов РЕДАКТОРА MATLAB. Можно запустить этот код, передав ему изображение RGB, чтобы создать такое же изображение маски программно.
function [BW,maskedRGBImage] = createMask(RGB) %createMask Threshold RGB image using auto-generated code from colorThresholder app. % [BW,MASKEDRGBIMAGE] = createMask(RGB) thresholds image RGB using % auto-generated code from the colorThresholder App. The colorspace and % minimum/maximum values for each channel of the colorspace were set in the % App and result in a binary mask BW and a composite image maskedRGBImage, % which shows the original RGB image values under the mask BW. % Auto-generated by colorThresholder app on 22-Jun-2016 %------------------------------------------------------ % Convert RGB image to chosen color space I = rgb2hsv(RGB); % Define thresholds for channel 1 based on histogram settings channel1Min = 0.713; channel1Max = 0.911; % Define thresholds for channel 2 based on histogram settings channel2Min = 0.049; channel2Max = 0.971; % Define thresholds for channel 3 based on histogram settings channel3Min = 0.005; channel3Max = 1.000; % Create mask based on chosen histogram thresholds sliderBW = (I(:,:,1) >= channel1Min ) & (I(:,:,1) <= channel1Max) & ... (I(:,:,2) >= channel2Min ) & (I(:,:,2) <= channel2Max) & ... (I(:,:,3) >= channel3Min ) & (I(:,:,3) <= channel3Max); BW = sliderBW; % Invert mask BW = ~BW; % Initialize output masked image based on input image. maskedRGBImage = RGB; % Set background pixels where BW is false to zero. maskedRGBImage(repmat(~BW,[1 1 3])) = 0; end