imhistmatch

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

Описание

пример

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

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

  • Если I является изображением и ref truecolor RGB является полутоновым изображением, затем 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-байт- nbins (когда ref - полутоновый) или 3-бай- nbins (когда ref is 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 является изображением truecolor 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')

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 интервалов. Можно использовать функцию helper, 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, будучи более темным изображением, имеет большинство своих пикселей в нижних интервалах. Эталонное изображение, r ef, полностью заполняет все 256 значений интервалов во всех трех каналах RGB.

Подсчитайте количество уникальных 8-битных значений уровня для каждого цветового канала темного и эталонного изображения. Можно использовать функцию helper, 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 интервалов. Можно использовать функцию helper, 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 truecolor или полутоновое изображение. Выходное изображение получают из изображения I гистограмма которого является приблизительным соответствием гистограмме входа изображения ref построен с nbins равномерно расположенные интервалы. Графическое J имеет тот же размер и тип данных, что и входное изображение I. Входной параметр nbins представляет верхний предел количества дискретных уровней, содержащихся в изображении J.

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

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

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

Алгоритмы

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

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

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

Введенный в R2012b