imhistmatch

Настройте гистограмму 2D изображения, чтобы совпадать с гистограммой ссылочного изображения

Синтаксис

J = imhistmatch(I,ref)
J = imhistmatch(I,ref,nbins)
J = imhistmatch(___,Name,Value)
[J,hgram] = imhistmatch(___)

Описание

пример

J = imhistmatch(I,ref) преобразовывает 2D изображение полутонового или истинного цвета I, возвращающий выходное изображение J, гистограмма которого приблизительно совпадает с гистограммой ссылочного изображения ref.

  • Если и I и ref являются изображениями RGB истинного цвета, то imhistmatch совпадает с каждым цветовым каналом I независимо к соответствующему цветовому каналу ref.

  • Если I является изображением RGB истинного цвета, и ref является полутоновым изображением, то imhistmatch совпадает с каждым каналом I против одной гистограммы, выведенной от ref.

  • Если I является полутоновым изображением, то ref должен также быть полутоновым изображением.

Изображения I и ref могут быть любым из допустимых типов данных и не должны быть равными в размере.

пример

J = imhistmatch(I,ref,nbins) использование nbins равномерно распределенные интервалы в соответствующей области значений для данного типа данных image. Возвращенное изображение J имеет не больше, чем дискретные уровни nbins.

  • Если типом данных изображения является или single или double, то область значений гистограммы [0, 1].

  • Если типом данных изображения является uint8, то область значений гистограммы [0, 255].

  • Если типом данных изображения является uint16, то область значений гистограммы [0, 65535].

  • Если типом данных изображения является int16, то область значений гистограммы [-32768, 32767].

пример

J = imhistmatch(___,Name,Value) пары "имя-значение" использования, чтобы изменить поведение алгоритма соответствия гистограммы.

пример

[J,hgram] = imhistmatch(___) возвращает гистограмму ссылочного изображения ref, используемый для соответствия в hgram. hgram является 1 nbins (когда ref является шкалой полутонов), или 3 nbins (когда ref является истинным цветом), матрица, где nbins является количеством интервалов гистограммы. Каждая строка в hgram хранит гистограмму одного цветового канала ref.

Примеры

свернуть все

Эти воздушные изображения, взятые в разное время, представляют перекрывающиеся представления того же ландшафта в Конкорде, Массачусетс. Этот пример демонстрирует, что вход отображает A, и Ref может иметь различные размеры и типы изображения.

Загрузите изображение RGB и ссылочное полутоновое изображение.

A = imread('concordaerial.png');
Ref = imread('concordorthophoto.png');

Получите размер A.

size(A)
ans = 1×3

        2036        3060           3

Получите размер Ref.

size(Ref)
ans = 1×2

        2215        2956

Обратите внимание на то, что отобразите A, и Ref отличаются в размере и типе. A изображений является изображением RGB истинного цвета, в то время как изображение Ref является полутоновым изображением. Оба изображения имеют тип данных uint8.

Сгенерируйте соответствующее выходное изображение гистограммы. Пример совпадает с каждым каналом A против одной гистограммы Ref. Выходное изображение B берет характеристики изображения A - это - изображение RGB, размер которого и тип данных эквивалентны, отображают A. Количество отличных уровней, существующих в каждом канале RGB изображения B, совпадает с количеством интервалов в гистограмме, созданной из полутонового изображения Ref. В этом примере гистограмма Ref и B имеет количество по умолчанию интервалов, 64.

B = imhistmatch(A,Ref);

Отобразитесь RGB отображают A, ссылочное изображение Ref, и гистограмма соответствовала, RGB отображают B. Изображения изменены перед отображением.

imshow(A)
title('RGB Image with Color Cast')

imshow(Ref)
title('Reference Grayscale Image')

imshow(B)
title('Histogram Matched RGB Image')

Считайте цветное изображение и ссылочное изображение. Чтобы продемонстрировать полиномиальный метод, присвойте ссылочное изображение, чтобы быть более темными из двух изображений.

I = imread('office_4.jpg');
ref = imread('office_2.jpg');
montage({I,ref})
title('Input Image (Left) vs Reference Image (Right)');

Используйте полиномиальный метод, чтобы настроить интенсивность изображения I так, чтобы это совпадало с гистограммой ссылочного изображения ref. Для сравнения также настройте интенсивность изображения I с помощью универсального метода.

J = imhistmatch(I,ref,'method','polynomial');
K = imhistmatch(I,ref,'method','uniform');
montage({J,K})
title('Histogram-Matched Image Using Polynomial Method (Left) vs Uniform Method (Right)');

Соответствующее гистограмме изображение с помощью универсального метода вводит фиктивные цвета в небе и дороге. Соответствующее гистограмме изображение с помощью полиномиального метода не показывает этот артефакт.

В этом примере вы будете видеть эффект на выходное изображение J варьирования количества равномерно распределенных интервалов в целевой гистограмме изображения Ref от его значения по умолчанию 64 к максимальному значению 256 для пиксельных данных uint8.

Следующие изображения были взяты с цифровым фотоаппаратом и представляют два различных воздействия той же сцены.

    A   = imread('office_2.jpg');   % Dark Image
    Ref = imread('office_4.jpg');   % Reference image

Отобразите A, будучи более темным изображением, имеет превосходство его пикселей в более низких интервалах. Ссылочное изображение, Ref, является правильно представленным изображением и полностью заполняет все доступные значения интервалов во всех трех каналах RGB: как показано в приведенной ниже таблице, все три канала имеют 256 уникальных уровней для 8-битных пиксельных значений.

Уникальные 8-битные значения уровня для красного канала 205 для A и 256 для Ref. Уникальные 8-битные значения уровня для зеленого канала 193 для A и 256 для Ref. Уникальные 8-битные значения уровня для синего канала 224 для A и 256 для Ref.

Пример генерирует выходное изображение B с помощью трех различных значений nbins: 64, 128 и 256. Цель функционального imhistmatch состоит в том, чтобы преобразовать, отображают A, таким образом, что гистограмма выходного изображения B является соответствием к гистограмме Ref, созданного с nbins равномерно распределенные интервалы. В результате nbins представляет верхний предел количества уровней дискретных данных, существующих в изображении B.

[B64,  hgram] = imhistmatch(A, Ref,  64);   
[B128, hgram] = imhistmatch(A, Ref, 128);
[B256, hgram] = imhistmatch(A, Ref, 256);

Количество уникальных 8-битных значений уровня для каждого выходного изображения описано в таблице. Обратите внимание на то, что когда nbins увеличивается, количество уровней в каждом канале RGB выходного изображения, которое также увеличивает B.

nbinsВыходное изображениеКоличество уникальных значений гистограммы
64B6457
128B128101
256B256134

Этот пример показывает, как выполнить гистограмму, соответствующую с различными количествами интервалов.

Загрузите 16-битное изображение DICOM колена, отображенного через MRI.

K = dicomread('knee1.dcm');   % read in original 16-bit image
LevelsK = unique(K(:));       % determine number of unique code values
disp(['image K: ',num2str(length(LevelsK)),' distinct levels']);
image K: 448 distinct levels
disp(['max level = ' num2str( max(LevelsK) )]);
max level = 473
disp(['min level = ' num2str( min(LevelsK) )]);
min level = 0

Все 448 дискретных значений в низких кодовых обозначениях, который заставляет изображение выглядеть темным. Чтобы исправить это, масштабируйте данные изображения, чтобы породить целую 16-битную линейную оболочку столбцов [0, 65535].

Kdouble = double(K);                  % cast uint16 to double
kmult = 65535/(max(max(Kdouble(:)))); % full range multiplier
Ref = uint16(kmult*Kdouble);   % full range 16-bit reference image

Затемните ссылочное изображение Ref, чтобы создать изображение A, который может использоваться в операции соответствия гистограммы.

%Build concave bow-shaped curve for darkening |Ref|.
ramp = [0:65535]/65535;
ppconcave = spline([0 .1 .50  .72 .87 1],[0 .025 .25 .5 .75 1]);
Ybuf = ppval( ppconcave, ramp);
Lut16bit = uint16( round( 65535*Ybuf ) );
% Pass image |Ref| through a lookup table (LUT) to darken the image.
A = intlut(Ref,Lut16bit);

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

subplot(1,2,1)
imshow(Ref)
title('Ref: Reference Image')
subplot(1,2,2)
imshow(A)
title('A: Darkened Image');

Сгенерируйте соответствующие гистограмме выходные изображения с помощью гистограмм с различным количеством интервалов. Сначала используйте количество по умолчанию интервалов, 64. Затем используйте количество значений, существующих в изображении A, 448 интервалов.

B16bit64 = imhistmatch(A(:,:,1),Ref(:,:,1));  % default: 64 bins

N = length(LevelsK);     % number of unique 16-bit code values in image A.
B16bitUniq = imhistmatch(A(:,:,1),Ref(:,:,1),N);

Просмотрите результаты двух операций соответствия гистограммы.

figure
subplot(1,2,1)
imshow(B16bit64)
title('B16bit64: 64 bins')
subplot(1,2,2)
imshow(Ref)
title(['B16bitUniq: ',num2str(N),' bins'])

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

свернуть все

Введите изображение, которое будет преобразовано, задано как 2D истинный цвет или полутоновое изображение. Возвращенное изображение будет посещать урок типа данных входного изображения.

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

Ссылочное изображение, гистограмма которого является ссылочной гистограммой, заданной как 2D истинный цвет или полутоновое изображение. Ссылочное изображение обеспечивает равномерно распределенную гистограмму ссылки интервала nbins, с каким выходным изображением J пытается совпадать.

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

Количество равномерно распределенных интервалов в ссылочной гистограмме, заданной как положительное целое число. В дополнение к определению количества равномерно распределенных интервалов в гистограмме для изображения ref nbins также представляет верхний предел количества уровней дискретных данных, существующих в выходном изображении J.

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

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: imhistmatch(I,ref,'Method','polynomial') совпадает с гистограммой изображения I к тому из ссылочного изображения ref с помощью метода отображения полинома.

Отображение метода раньше сопоставляло гистограмму ref, чтобы отобразить I, заданный как пара, разделенная запятой, состоящая из 'Method' и одно из этих значений:

  • 'uniform' — Используйте основанную на гистограмме функцию интенсивности и коррекцию гистограммы.

  • 'polynomial' — Вычислите кубическую функцию отображения Многочлена Эрмита от совокупных гистограмм источника и ссылочных изображений. Полиномиальный метод полезен, когда ссылочное изображение является более темным, чем входное изображение. В этой ситуации полиномиальный метод дает более сглаженный цветовой переход, чем универсальный метод.

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

свернуть все

Выходное изображение, возвращенное как 2D истинный цвет или полутоновое изображение. Выходное изображение выведено от изображения I, гистограмма которого является аппроксимированным соответствием к гистограмме входного изображения ref, созданный с nbins равномерно распределенные интервалы. Изображение J одного размера и тип данных как входное изображение I. Входной параметр nbins представляет верхний предел количества дискретных уровней, содержавшихся в изображении J.

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

Количества гистограммы вывели от ссылочного изображения ref, заданный как вектор или матрица. Когда ref является изображением истинного цвета, hgram является 3 nbins матрицей. Когда ref является полутоновым изображением, hgram является 1 nbins вектором.

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

Алгоритмы

Цель imhistmatch состоит в том, чтобы преобразовать, отображают I, таким образом, что гистограмма изображения J совпадает с гистограммой, выведенной от изображения ref. Это состоит из nbins равномерно распределенные интервалы, которые охватывают полный спектр типа данных image. Последствие соответствия с гистограммами таким образом - то, что nbins также представляет верхний предел количества уровней дискретных данных, существующих в изображении J.

Важный поведенческий аспект этого алгоритма, чтобы отметить - то, что, когда nbins увеличивается в значении, степени быстрых колебаний между смежным заполненным peaks в гистограмме изображения, которое J имеет тенденцию увеличивать. Это видно в следующих графиках гистограммы, взятых из 16-битного полутонового примера MRI.

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

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

| | |

Представленный в R2012b