-4

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

% Image that I would like to apply histogram equalization to 
C = gallery('wilk',21); 
figure, imagesc(C) 

E = histeq(C); 
figure, imagesc(E); 

Однако, когда я смотрю на выходе histeq, я получаю результат, который имеет только два уникальных значения: 0.873 и 1.000. Почему вывод не охватывает весь диапазон ввода? Я ожидаю, что на выходе будет больше двух уникальных значений.

enter image description here

+1

Почему вы не просто делать 'imhist'? Он принимает изображение и выводит гистограмму на фигуре. Кроме того, что возвращает 'unique (C)' после гистограммы? – rayryeng

+0

Пожалуйста, покажите свой код выравнивания гистограммы. А пока вы пытались «histeq»? – rayryeng

+0

Ах. Я только что заметил, что представляет собой вход. Он не работает, потому что ввод, который вы указываете, является дерьмом для выравнивания гистограммы. Динамический диапазон и распределение интенсивностей очень малы, что взорвет диапазон, как только вы его «нормализуете». Порекомендуйте вам ознакомиться с тем, как работает выравнивание гистограммы перед ее использованием. Попробуйте это на фактическом изображении, прежде чем продолжить. Например, используйте образ Image Processing Toolbox: 'C = imread ('pout.tif');'. – rayryeng

ответ

2

В соответствии с документацией для histeq, если входной сигнал имеет тип double или single, как ожидается, будет в диапазоне: [0, 1].

значение интенсивности в соответствующем диапазоне: [0, 1] для изображений класса двойного, [0, 255] для изображений в формате uint8, и [0, 65535] для изображений класса uint16.

Ваши данные не нормируется и типа double,

whos C 

% Name  Size   Bytes Class  Attributes 
% 
% C   21x21    3528 double  

[min(C(:)), max(C(:))] 
% 0 10 

Вам нужно будет нормировать его первым. Вы можете использовать mat2gray сделать это:

E = histeq(mat2gray(C)); 

enter image description here

+1

Возможно, вы рисуете с помощью 'imshow'. 'imshow' делает цифры действительным размером (в пикселях), поэтому они будут маленькими, потому что они равны 21 x 21. Также по умолчанию используется цветовая палитра« серый ». Используйте 'imagesc'. – Suever

+3

@Masi То, что вы только что написали, не имеет для меня большого смысла. Трудно сказать, что нужно делать с вашими данными, так как мы не можем их увидеть. Возможно, задайте новый вопрос, который представляет собой обработку изображений, показывающую, что вы пытались сделать, чтобы исправить ваши данные? Также включите сами данные и покажите ожидаемый результат. Этот вопрос просто касался вашего неправильного использования 'histeq' – Suever

+0

. Как вы можете решить, какой' hgram' применять конкретную матрицу в 'histeq (Matrix)'? Etc, если 'size (Matrix)' '' 1 2093809'. Я не люблю получать плоские гистограммы здесь. - - генерировать 'n = размер (pTFD, 2); hgram = ones (1, n) * prod (size (pTFD))/n; 'тяжелый ресурс. –