histeq

Улучшите контраст с помощью коррекции гистограммы

Синтаксис

J = histeq(I,hgram)
J = histeq(I,n)
[J,T] = histeq(I)
newmap = histeq(X,map)
newmap = histeq(X,map,hgram)
[newmap,T] = histeq(X,___)

Описание

пример

J = histeq(I,hgram) преобразовывает полутоновое изображение I так, чтобы гистограмма выходного полутонового изображения J с интервалами length(hgram) приблизительно совпадала с целевой гистограммой hgram.

Опционально можно выполнить коррекцию гистограммы полутоновых изображений с помощью графического процессора (требует Parallel Computing Toolbox™). Для получения дополнительной информации смотрите Обработку изображений на графическом процессоре.

J = histeq(I,n) преобразовывает полутоновое изображение I, возвращающийся в J полутоновое изображение с n дискретные уровни серого. Примерно равное количество пикселей сопоставлено с каждым из уровней n в J, так, чтобы гистограмма J была приблизительно плоской. Гистограмма J является более плоской, когда n намного меньше, чем количество дискретных уровней в I.

[J,T] = histeq(I) возвращает полутоновое преобразование T, который сопоставляет уровни серого в изображении I к уровням серого в J.

newmap = histeq(X,map) преобразовывает значения в палитру так, чтобы гистограмма серого компонента индексируемого изображения X была приблизительно плоской. Это возвращает преобразованную палитру в newmap.

Этот синтаксис не поддержан на графическом процессоре.

newmap = histeq(X,map,hgram) преобразовывает палитру, сопоставленную с индексируемым изображением X так, чтобы гистограмма серого компонента индексируемого изображения (X, newmap) приблизительно совпадала с целевой гистограммой hgram. Функция histeq возвращает преобразованную палитру в newmap. length(hgram) должен совпасть с size(map,1).

Этот синтаксис не поддержан на графическом процессоре.

[newmap,T] = histeq(X,___) возвращает полутоновое преобразование T, который сопоставляет серый компонент map к серому компоненту newmap.

Этот синтаксис не поддержан на графическом процессоре.

Примеры

свернуть все

Считайте изображение в рабочую область.

I = imread('tire.tif');

Улучшите контраст изображения интенсивности с помощью коррекции гистограммы.

J = histeq(I);

Отобразите оригинальное изображение и откорректированное изображение.

imshowpair(I,J,'montage')
axis off

Отобразите гистограмму оригинального изображения.

figure
imhist(I,64)

Отобразите гистограмму обработанного изображения.

figure
imhist(J,64)

Загрузите 3-D набор данных.

load mristack

Выполните коррекцию гистограммы.

enhanced = histeq(mristack);

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

figure
subplot(1,2,1)
imshow(mristack(:,:,1))
title('Slice of Original Image')
subplot(1,2,2)
imshow(enhanced(:,:,1))
title('Slice of Enhanced Image')

Этот пример выполняет ту же коррекцию гистограммы на графическом процессоре.

I = gpuArray(imread('tire.tif'));
J = histeq(I);
figure
imshow(I)
figure
imshow(J)

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

свернуть все

Введите полутоновое изображение, заданное как числовой массив любой размерности.

Чтобы выполнить коррекцию гистограммы с помощью графического процессора, задайте I как gpuArray, который содержит числовой массив любой размерности.

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

Целевая гистограмма, заданная как числовой вектор. hgram имеет равномерно распределенные интервалы со значениями интенсивности в соответствующей области значений:

  • [0, 1] для изображений класса double или single

  • [0, 255] для изображений класса uint8

  • [0, 65535] для изображений класса uint16

  • [-32768, 32767] для изображений класса int16

histeq автоматически масштабирует hgram так, чтобы sum(hgram)=numel(I). Гистограмма J будет лучше совпадать с hgram, когда length(hgram) будет намного меньше, чем количество дискретных уровней в I.

Если вы выполняете коррекцию гистограммы с помощью графического процессора, то опционально можно задать hgram как gpuArray, который содержит числовой вектор.

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

Количество дискретных уровней серого, заданных как скаляр.

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

Индексируемое изображение, заданное как числовой массив любой размерности. Значения в X являются индексом в палитру map.

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

Палитра, заданная как c-by-3 массив. Каждая строка задает значение цвета RGB.

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

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

свернуть все

Выведите полутоновое изображение, возвращенное как числовой массив, одного размера и класс как входное изображение I.

Если коррекция гистограммы выполняется с помощью графического процессора, то J возвращен как gpuArray, содержащий числовой массив.

Полутоновое преобразование, возвращенное как числовой вектор. Преобразование T сопоставляет уровни серого в изображении I к уровням серого в J.

Если коррекция гистограммы выполняется с помощью графического процессора, то T возвращен как gpuArray, содержащий числовой вектор.

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

Преобразованная палитра, заданная как n-by-3 массив. Каждая строка задает значение цвета RGB.

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

Алгоритмы

Когда вы предоставляете желаемую гистограмму hgram, histeq выбирает полутоновое преобразование T, чтобы минимизировать

|c1(T(k))c0(k)|,

где c0 является совокупной гистограммой A, c1 является совокупной суммой hgram для всей интенсивности k. Эта минимизация подвергается ограничениям, что T должен быть монотонным, и c1 (T (a)) не может промахнуться по c0 (a) больше чем половиной расстояния между количествами гистограммы в a. histeq использует преобразование b = T (a), чтобы сопоставить уровни серого в X (или палитра) к их новым значениям.

Если вы не задаете hgram, то histeq создает плоский hgram,

hgram = ones(1,n)*prod(size(A))/n;

и затем применяет предыдущий алгоритм.

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

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

| |

Представлено до R2006a