Обработка изображений MATLAB: последний бин моей гистограммы - PullRequest
1 голос
/ 20 января 2020

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

im = imread('elephant.jpg');

%converts image to grayscale and displays it
im_gray = rgb2gray(im);
figure; 
imshow(im_gray)
title ('Original Gray-scale Image');

%displays the histogram of the grayscale image
figure; 
imhist(im_gray);
axis([0 255 0 22920])
title ('Histogram of the Original Gray-scale Image')
xlabel ('Pixel Value (Gray-level), ai')
ylabel ('Number of Pixels, Ni')

%lowers the contrast of original image --> deteriorated image
J = imadjust(im_gray,[0 0.5], [0.3 0.5]);
figure;
imshow(J);
title ('Deteriorated Image')

%displays histogram of the deteriorated image
figure;
imhist(J);
axis([0 255 0 489000])
title ('Histogram of the Deteriorated Image')
xlabel ('Pixel Value (Gray-level), ai')
ylabel ('Number of Pixels, Ni')

Histogram after lowering the contrast Histogram of the original image

1 Ответ

2 голосов
/ 20 января 2020

Последний бин «выстреливает», потому что imadjust ограничивает диапазон пикселей.

Команда: J = imadjust(im_gray,[0 0.5], [0.3 0.5]);:
Принимает все значения выше 0.5 (выше 128) im_gray и заменяет их на 0.5 (значение 128 в uint8 спектр).

imadjust документация немного неясна:

J = imadjust (I, [low_in high_in], [low_out high_out]) отображает значения интенсивности в I в новые значения в J такие, что значения между low_in и high_in отображаются на значения между low_out и high_out.

Не сказано, что происходит со значениями вне диапазона [low_in high_in].

Вы можете понять это из предыдущего предложения:

J = imadjust (I, [low_in high_in]) отображает значения интенсивности в I на новые значения в J, так что значения между low_in и high_in соответствуют значениям от 0 до 1.

  • Все значения ниже low_in отображаются на low_out.
  • Все значения выше high_in отображаются на high_out.

Все значения im_gray выше 0,5 (выше 128) отображаются на 0,5 в J.
Поскольку im_gray имеет много пикселей выше 128, J имеет много пикселей, которые равно 128.

Центральная ячейка гистограммы насчитывает около половины всех пикселей.

Вы можете использовать sum(J(:) == 128) для проверки.

...