В этом примере показано, как сегментировать изображение и создать бинарный рисунок маски с помощью приложения Color Thresholder. Пример сегментирует передний план (перцы) происхождения (фиолетовая ткань) на основе значений цвета.
В приложении Color Thresholder сегментация изображений может быть итеративным процессом. Например, попытайтесь сегментировать изображение в нескольких из цветовых пространств, поддержанных приложением, потому что одно цветовое пространство может изолировать конкретный цвет лучше, чем другой. В любом из поддерживаемых цветовых пространств можно первоначально выполнить автоматическую сегментацию путем выбора области на переднем плане или фоне. Затем можно совершенствовать сегментацию при помощи средств управления компонентом цвета, обеспеченных приложением.
Последняя часть этого примера показывает, как сохранить результаты вашей работы, создать рисунок маски и добраться, MATLAB® кодируют приложение, используемое, чтобы выполнить сегментацию.
Считайте цветное изображение в рабочую область.
rgb = imread('peppers.png');
Откройте приложение Color Thresholder от панели инструментов MATLAB. На вкладке Apps, в разделе Image Processing и Computer Vision, нажимают Color Thresholder.
Загрузите изображение в приложение Color Thresholder. Нажмите Load Image, и затем выберите Load Image from Workspace. В диалоговом окне Import From Workspace выберите изображение из рабочей области, и затем нажмите ОК.
Можно также открыть приложение из командной строки при помощи colorThresholder
функция, задавая имя изображения: colorThresholder(rgb);
. Можно также получить изображение, Получают Живые Изображения в Приложении Color Thresholder.
Отображения приложения Color Thresholder изображение во вкладке Choose a Color Space, с облаками точек, представляющими изображение в этих цветовых пространствах: RGB, HSV, YCbCr и L*a*b*. Для основанной на цвете сегментации выберите цветовое пространство, которое обеспечивает лучшее цветоделение. Используя мышь, вращайте представления облака точек, чтобы видеть, как они изолируют отдельные цвета. Сегментация с помощью приложения Color Thresholder может быть итеративным процессом — пробуют несколько различных цветовых пространств, прежде чем вы достигнете сегментации, которая удовлетворяет ваши потребности. В данном примере запустите процесс путем выбора цветового пространства YCbCr.
Когда вы выбираете цветовое пространство, приложение открывает новую вкладку, отображая изображение наряду с набором средств управления для каждого компонента цвета и представления облака точек. Управления цветом варьируются в зависимости от цветового пространства. Для цветового пространства YCbCr, отображения приложения Color Thresholder три гистограммы, представляющие эти три компонента цвета: компонент Y представляет яркость, компонент Cb представляет сине-желтый спектр, и компонент Cr представляет красно-зеленый спектр.
Чтобы исследовать изображение, переместите курсор через изображение, чтобы получить доступ к панорамированию и средствам управления изменением масштаба.
Во-первых, сегментируйте изображение с помощью автоматической пороговой обработки. Поскольку цвет фона (фиолетовая ткань) близко к единому цвету, сегментируйте его, а не основные объекты (перцы). Можно всегда инвертировать маску позже с помощью опции Маски Инвертирования.
Задайте область с помощью инструмента ROI от руки. Нажмите кнопку в верхнем левом углу изображения и чертите ROI на фоне. Можно чертить несколько областей.
После рисования области приложение Color Thresholder автоматически пороги изображение на основе цветов вы выбрали в области, которую вы чертили. Y, Cb и управления цветом Cr изменяются, чтобы отразить сегментацию. Эта автоматическая пороговая обработка не создает чистую сегментацию фона и переднего плана, особенно на нижней границе между передним планом и фоном. В данном примере цвет фона легче около нижней части изображения. Если вы хотите удалить область, вы чертили, и запустите, щелкните правой кнопкой где угодно по области и выберите Delete Freehand.
Чтобы точно настроить автоматическую пороговую обработку, используйте управления цветом. Для каждого Y, Cb и управления цветом Cr, можно установить область значений значений путем перетаскивания нижних и верхних границ в той гистограмме. Используя эти управления цветом можно значительно улучшить сегментацию переднего плана.
Другой подход к сегментации изображения в цветовом пространстве YCbCr должен чертить ROI на облаке точек, чтобы выбрать область значений цветов.
На панели инструментов приложения нажмите Reset Thresholds, чтобы вернуться назад к оригинальному изображению. В нижней правой панели приложения перетащите облако точек, чтобы вращаться, пока вы не изолируете представление цвета, вы интересуетесь пороговой обработкой. Нажмите кнопку в левом верхнем углу облака точек. Приложение Color Thresholder преобразует 3-D облако точек в 2D представление и активирует инструмент ROI многоугольника. Чертите ROI вокруг цвета, который вы хотите сегментировать (фиолетовый). Этот метод может создать лучшую сегментацию, чем начальный автоматический подход пороговой обработки.
Чтобы сегментировать изображение в другом цветовом пространстве, нажмите New Color Space в панели инструментов приложения. Во вкладке Choose a Color Space выберите HSV-цветовое пространство.
Приложение Color Thresholder создает новую вкладку, отображающую изображение и средства управления компонентом цвета для HSV-цветового пространства. В этом цветовом пространстве H представляет оттенок, S представляет насыщение, и V представляет значение. HSV-цветовое пространство использует кнопку двойного направления в компоненте H и два ползунка гистограммы для S и V компонентах. Вкладка также содержит представление облака точек цветов в изображении.
Как в предыдущей итерации, можно использовать все те же методы: автоматическая пороговая обработка и интерактивное использование средств управления компонентом цвета, включая облако точек. Когда вы используете управления цветом, вы видите происходящую сегментацию. В панели с управлением H измените область значений оттенка путем перетаскивания одной стрелы за один раз. Экспериментируйте со средствами управления, пока у вас не будет чистого разделения фона от переднего плана. Можно очистить маленькие недостатки после того, как вы создадите рисунок маски с помощью функций тулбокса, таких как морфологические операторы.
Эта часть примера показывает, как создать рисунок маски после сегментации. Можно также получить сегментированное изображение, и код MATLAB раньше создавал рисунок маски.
Поскольку пример сегментировал фон (фиолетовая ткань), а не основные объекты (перцы), подкачайте передний план и фон путем нажатия на Invert Mask.
Просмотрите бинарный рисунок маски, который вы создали путем нажатия на Show Binary на панели инструментов приложения.
Сохраните рисунок маски в рабочей области. На панели инструментов маски нажмите Export и выберите Export Images.
В диалоговом окне Export To Workspace задайте имена переменных для бинарного рисунка маски. Можно также сохранить исходный образ входа RGB и сегментированную версию оригинального изображения.
Чтобы сохранить код MATLAB, требуемый воссоздать сегментацию, нажмите Export и выберите Export Function. Приложение Color Thresholder открывает редактор MATLAB с кодом, который создает сегментацию. Чтобы сохранить код, нажмите панель инструментов Save on the MATLAB Editor. Можно запустить этот код, передав его изображение 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