Гистограмма Эквализации

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

Настройте значения интенсивности с помощью гистограммы эквализации

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

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

I = imread('pout.tif');

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

figure
subplot(1,2,1)
imshow(I)
subplot(1,2,2)
imhist(I,64)

Figure contains 3 axes. Axes 1 contains an object of type stem. Axes 2 contains 2 objects of type image, line. Axes 3 contains an object of type image.

Настройте контраст с помощью гистограммы эквализации. В этом примере функция гистограммы эквализации, histeq, пытается соответствовать плоской гистограмме с 64 интервалами, что является поведением по умолчанию. Вместо этого можно задать другую гистограмму.

J = histeq(I);

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

figure
subplot(1,2,1)
imshow(J)
subplot(1,2,2)
imhist(J,64)

Figure contains 3 axes. Axes 1 contains an object of type stem. Axes 2 contains 2 objects of type image, line. Axes 3 contains an object of type image.

График кривой преобразования для гистограммы эквализации

Этот пример показывает, как построить график кривой преобразования для гистограммы эквализации. histeq может вернуть вектор 1 на 256, который показывает, для каждого возможного входного значения, полученное выходное значение. (Значения в этом векторе находятся в области значений [0,1], независимо от класса входного изображения.) Можно построить график этих данных, чтобы получить кривую преобразования.

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

I = imread('pout.tif');

Настройте контраст с помощью гистограммы эквализации, используя histeq функция. Задайте возвращаемое значение преобразования серой шкалы, T, который является вектором, который отображает градации серого в изображении интенсивности I до серых уровней в J.

[J,T] = histeq(I);

Постройте график кривой преобразования. Заметьте, как эта кривая отражает гистограммы на предыдущем рисунке, с входными значениями в основном между 0,3 и 0,6, в то время как выходные значения распределены равномерно между 0 и 1.

figure
plot((0:255)/255,T);

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