multithresh

Многоуровневые пороги изображений с помощью метода Оцу

Описание

пример

thresh = multithresh(A) возвращает одно пороговое значение thresh вычисленный для изображения A использование метода Оцу. Можно использовать thresh как входной параметр к imquantize преобразовывать изображение в двухуровневое изображение.

пример

thresh = multithresh(A,N) возвращает thresh вектор 1 на n, содержащий N пороговые значения с помощью метода Оцу. Можно использовать thresh как входной параметр к imquantize чтобы преобразовать отображают A в изображение с N+1 дискретные уровни.

пример

[thresh,metric] = multithresh(___) возвращает metric, мера эффективности вычисленных порогов.

Примеры

свернуть все

Считайте изображение и отобразите его.

I = imread('coins.png');
imshow(I)

Figure contains an axes object. The axes object contains an object of type image.

Вычислите одно пороговое значение для изображения.

level = multithresh(I);

Сегментируйте изображение на две области с помощью imquantize , определение порогового уровня, возвращенного multithresh .

seg_I = imquantize(I,level);
figure
imshow(seg_I,[])

Figure contains an axes object. The axes object contains an object of type image.

Считайте изображение и отобразите его.

I = imread('circlesBrightDark.png');
imshow(I)
axis off
title('Original Image')

Figure contains an axes object. The axes object with title Original Image contains an object of type image.

Вычислите два пороговых уровня.

thresh = multithresh(I,2);

Сегментируйте изображение на три уровня с помощью imquantize .

seg_I = imquantize(I,thresh);

Преобразуйте сегментированное изображение в цветное изображение с помощью label2rgb и отобразите его.

RGB = label2rgb(seg_I); 	 
figure;
imshow(RGB)
axis off
title('RGB Segmented Image')

Figure contains an axes object. The axes object with title RGB Segmented Image contains an object of type image.

Считайте истинный цвет (RGB) изображение и отобразите его.

I = imread('peppers.png');
imshow(I) 
axis off
title('RGB Image');

Figure contains an axes object. The axes object with title RGB Image contains an object of type image.

Сгенерируйте пороги для семи уровней от целого изображения RGB.

threshRGB = multithresh(I,7);

Сгенерируйте пороги для каждой плоскости изображения RGB.

threshForPlanes = zeros(3,7);			

for i = 1:3
    threshForPlanes(i,:) = multithresh(I(:,:,i),7);
end

Обработайте целое изображение с набором пороговых значений, вычисленных из целого изображения.

value = [0 threshRGB(2:end) 255]; 
quantRGB = imquantize(I, threshRGB, value);

Процесс каждая плоскость RGB отдельно с помощью порогового вектора вычисляется из данной плоскости. Квантуйте каждый пороговый вектор использования плоскости RGB, сгенерированный для той плоскости.

quantPlane = zeros( size(I) );

for i = 1:3
    value = [0 threshForPlanes(i,2:end) 255]; 
    quantPlane(:,:,i) = imquantize(I(:,:,i),threshForPlanes(i,:),value);
end

quantPlane = uint8(quantPlane);

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

imshowpair(quantRGB,quantPlane,'montage') 
axis off
title('Full RGB Image Quantization        Plane-by-Plane Quantization')

Figure contains an axes object. The axes object with title Full RGB Image Quantization Plane-by-Plane Quantization contains an object of type image.

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

dim = size( quantRGB );
quantRGBmx3   = reshape(quantRGB,   prod(dim(1:2)), 3);
quantPlanemx3 = reshape(quantPlane, prod(dim(1:2)), 3);

colorsRGB   = unique(quantRGBmx3,   'rows' );
colorsPlane = unique(quantPlanemx3, 'rows' );

disp(['Unique colors in RGB image            : ' int2str(length(colorsRGB))]);
Unique colors in RGB image            : 188
disp(['Unique colors in Plane-by-Plane image : ' int2str(length(colorsPlane))]);
Unique colors in Plane-by-Plane image : 231

Readimage.

I = imread('circlesBrightDark.png');

Найдите все уникальные полутоновые значения в изображении.

uniqLevels = unique(I(:));  

disp(['Number of unique levels = ' int2str( length(uniqLevels) )]);
Number of unique levels = 148

Вычислите серию порогов при монотонно увеличении значений N.

Nvals = [1 2 4 8];
for i = 1:length(Nvals)
    [thresh, metric] = multithresh(I, Nvals(i) );
    disp(['N = ' int2str(Nvals(i)) '  |  metric = ' num2str(metric)]);
end
N = 1  |  metric = 0.54767
N = 2  |  metric = 0.98715
N = 4  |  metric = 0.99648
N = 8  |  metric = 0.99902

Примените набор 8 пороговых значений, чтобы получить 9-уровневую сегментацию с помощью imquantize .

seg_Neq8 = imquantize(I,thresh);
uniqLevels = unique( seg_Neq8(:) )
uniqLevels = 9×1

     1
     2
     3
     4
     5
     6
     7
     8
     9

Порог изображение с помощью seg_Neq8 как вход к multithresh. Установите N равняйтесь 8, который составляет 1 меньше, чем количество уровней в этом сегментированном изображении. multithresh возвращает metric значение 1.

[thresh, metric] = multithresh(seg_Neq8,8)
thresh = 1×8

    1.8784    2.7882    3.6667    4.5451    5.4549    6.3333    7.2118    8.1216

metric = 1

Порог изображение снова, на этот раз увеличивая значение N 1. Это значение теперь равняется количеству уровней в изображении. Отметьте, как вход является вырожденным, потому что количество уровней в изображении - лишь немногие для количества требуемых порогов. Следовательно, multithresh возвращает metric значение 0.

[thresh, metric] = multithresh(seg_Neq8,9)
Warning: No solution exists because the number of unique levels in the image are too few to find 9 thresholds. Returning an arbitrarily chosen solution.
thresh = 1×9

     1     2     3     4     5     6     7     8     9

metric = 0

Входные параметры

свернуть все

Отобразите, чтобы быть порогом в виде числового массива любой размерности. multithresh находит пороги на основе совокупной гистограммы целого массива. multithresh рассматривает изображение RGB как 3-D числовой массив и вычисляет пороги для объединенных данных из всех трех цветных плоскостей.

multithresh использует область значений входного изображения A, [min(A(:)) max(A(:))], когда пределы для вычисления гистограммы используются в последующих расчетах. multithresh игнорирует любой NaNs в расчете. Любой Infs и -Infs считаются в первом и последнем интервале гистограммы, соответственно.

Для вырожденных входных параметров, где количество уникальных значений в A меньше чем или равно N, нет никакого эффективного решения с помощью метода Оцу. Для таких входных параметров, возвращаемое значение thresh содержит все уникальные значения от A и возможно некоторые дополнительные значения, которые выбраны произвольно.

Типы данных: single | double | int16 | uint8 | uint16

Количество пороговых значений в виде положительного целого числа. Для N > 2, multithresh использует основанную на поиске оптимизацию критерия Оцу, чтобы найти пороги. Основанная на поиске оптимизация гарантирует только локально оптимальные результаты. Поскольку шанс схождения к локальному оптимуму увеличивается с N, желательно использовать меньшие значения N, обычно N < 10. Максимальное позволенное значение для N 20.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Выходные аргументы

свернуть все

Набор пороговых значений, используемых, чтобы квантовать изображение, возвратился как числовой вектор 1 на n, тип данных которого эквивалентен, отображают A.

Эти пороги находятся в той же области значений как входное изображение AВ отличие от этого, graythresh функция, которая возвращает нормированный порог в области значений [0, 1].

Мера эффективности порогов, возвращенных как номер в области значений [0, 1]. Более высокие значения указывают на большую эффективность порогов в разделении входного изображения в N+1 классы на основе объективного критерия Оцу. Для вырожденных входных параметров, где количество уникальных значений в A меньше чем или равно N, metric равняется 0.

Типы данных: double

Ссылки

[1] Оцу, N., "Пороговый Метод выбора от Гистограмм Уровня серого", Транзакции IEEE в Системах, Человеке, и Кибернетике, Издании 9, № 1, 1979, стр 62-66.

Расширенные возможности

Смотрите также

| | |

Представленный в R2012b
Для просмотра документации необходимо авторизоваться на сайте