exponenta event banner

imhistmatch

Отрегулировать гистограмму изображения 2-D в соответствии с гистограммой опорного изображения

Описание

пример

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

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

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

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

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

пример

J = imhistmatch(I,ref,nbins) использование nbins равномерно разнесенные ячейки в пределах соответствующего диапазона для данного типа данных изображения. Возвращенное изображение 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-by-nbins (когда ref является градацией серого) или 3-по-nbins (когда ref truecolor) матрица, где 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-изображение truecolor, в то время как изображение 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')

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

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

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

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

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

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

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

Figure contains an axes. The axes with title Input Image (Left) vs Reference Image (Right) contains an object of type image.

Используйте метод полинома для регулировки интенсивности изображения 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)');

Figure contains an axes. The axes with title Histogram-Matched Image Using Polynomial Method (Left) vs Uniform Method (Right) contains an object of type image.

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

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

Загрузить два изображения типа данных uint8 в рабочую область. Изображения были сделаны с помощью цифровой камеры и представляют две различные экспозиции одной и той же сцены. A является недорасположенным изображением и выглядит темным. ref - эталонное изображение с хорошей экспозицией и яркостью.

A = imread('office_2.jpg');
ref = imread('office_4.jpg');

Отображение изображений в монтаже.

montage({A,ref})
title('Dark Image (Left) and Reference Image (Right)')

Figure contains an axes. The axes with title Dark Image (Left) and Reference Image (Right) contains an object of type image.

Отображение гистограммы каждого цветового канала с использованием 256 ячеек. Можно использовать функцию помощника, displayHistogramChannels, которая включена в пример.

displayHistogramChannels(A,ref)

Figure contains 6 axes. Axes 1 with title Histograms of Input Image contains an object of type histogram. Axes 2 with title Histograms of Reference Image contains an object of type histogram. Axes 3 contains an object of type histogram. Axes 4 contains an object of type histogram. Axes 5 contains an object of type histogram. Axes 6 contains an object of type histogram.

Изображение A, будучи более темным изображением, имеет большинство своих пикселей в нижних ячейках. Ссылочное изображение, ref, полностью заполняет все 256 значений ячеек во всех трех каналах RGB.

Подсчитайте количество уникальных 8-битных значений уровня для каждого цветового канала темного и опорного изображения. Можно использовать функцию помощника, countUniqueValues, которая включена в пример.

numVals = countUniqueValues(A,ref);
table(numVals(:,1),numVals(:,2),numVals(:,3), ...
  'VariableNames',["Red" "Green" "Blue"], ...
  'RowNames',["A" "ref"])
ans=2×3 table
           Red    Green    Blue
           ___    _____    ____

    A      205     193     224 
    ref    256     256     256 

Выровнять гистограмму темного изображения, используя три различных значения nbins: 64, 128 и 256. 64 - количество ячеек по умолчанию, а 256 - максимальное количество ячеек для uint8 пиксельные данные.

[B64,hgram64]   = imhistmatch(A,ref,64);   
[B128,hgram128] = imhistmatch(A,ref,128);
[B256,hgram256] = imhistmatch(A,ref,256);

figure
montage({B64,B128,B256},'Size',[1 3])
title('Output Image B64  |  Output Image B128  |  Output Image B256')

Figure contains an axes. The axes with title Output Image B64 | Output Image B128 | Output Image B256 contains an object of type image.

Отображение гистограммы каждого цветового канала с использованием 256 ячеек. Можно использовать функцию помощника, displayThreeHistogramChannels, которая включена в пример.

displayThreeHistogramChannels(B64,B128,B256)

Figure contains 9 axes. Axes 1 with title Histograms of Output Image B64 contains an object of type histogram. Axes 2 with title Histograms of Output Image B128 contains an object of type histogram. Axes 3 with title Histograms of Output Image B256 contains an object of type histogram. Axes 4 contains an object of type histogram. Axes 5 contains an object of type histogram. Axes 6 contains an object of type histogram. Axes 7 contains an object of type histogram. Axes 8 contains an object of type histogram. Axes 9 contains an object of type histogram.

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

numVals = countUniqueValues(B64,B128,B256);
table(numVals(:,1),numVals(:,2),numVals(:,3), ...
  'VariableNames',["Red" "Green" "Blue"], ...
  'RowNames',["B64" "B128" "B256"])
ans=3×3 table
            Red    Green    Blue
            ___    _____    ____

    B64      57      60      58 
    B128    101     104     104 
    B256    134     135     136 

В этом примере показано, как выполнить сопоставление гистограмм с различным количеством ячеек.

Загрузите 16-битное DICOM-изображение колена, изображенное с помощью МРТ.

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');

Figure contains 2 axes. Axes 1 with title Ref: Reference Image contains an object of type image. Axes 2 with title A: Darkened Image contains an object of type 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'])

Figure contains 2 axes. Axes 1 with title B16bit64: 64 bins contains an object of type image. Axes 2 with title B16bitUniq: 448 bins contains an object of type image.

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

свернуть все

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

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

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

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

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

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

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

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

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

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

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

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

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

свернуть все

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

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

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

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

Алгоритмы

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

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

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

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