Применить новую уравненную гистограмму на матрице изображения в матлабе

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

2 ответа

Ну, я нашел алгоритм для применения новой скорректированной гистограммы на матрице изображений здесь. Конкретная часть этой веб-страницы, которая мне помогла, показана на этой картинке: И коды, которые я написал для реализации этого алгоритма, приведены в этой ссылке. Обратите внимание, что строки с 22 по 24 в файле "HistogramEqualization" реализуют алгоритм выше для изображения с серой шкалой. И код для RGB один и тот же, за исключением того, что он должен повторяться для каждого цветового канала.


  1. Создайте гистограмму для изображения.
  2. Вычислить гистограмму кумулятивной функции распределения.
  3. Вычислите новые значения с помощью общей формулы выравнивания гистограммы.
  4. Назначьте новые значения для каждого значения серого в изображении.

    clc
    close all
    clear all
    %% HISTOGRAM EQULAIZER
    %%
    I1= imread ('C:\Users\sepideh\Pictures\dip\PC040311.jpg');
    zz=rgb2gray(I1);
    figure,subplot(1,2,1),imshow(zz), title('original image')
    subplot(1,2,2),imhist(zz),title('original image histogram')
    
    %% Calculating the CDF 
    hst=imhist(zz);
    j=1;
    cdff(1,1)=hst(1,1);
    for i=2:256
    cdff(i)=hst(i)+cdff(i-j); 
    end
    cdff1=cdff';
    cdf_min=min(cdff);
    [row col]=size(zz);
    mn=row*col;
    figure, plot(cdff), title('CDF of Image')
    %% calcuting new intensity
    for indx=1:length(cdff)
    h(indx)=round((cdff(indx)-cdf_min)/(mn-cdf_min)*255);
    
    end
    h1=h';
    figure,plot(h1), title('New value for General Histogram')
    
    %% EQULIZED IMAGE
    
    HIm=*****(zeros(size(zz,1),size(zz,2)));
    
    for i=1:row;
    for j=1:col;
    HIm(i,j) = h((zz(i,j)+1));
    end
    end
    
    figure,subplot(1,2,1),imshow(HIm), title('Equlized Image')
    subplot(1,2,2),imhist(HIm) ,title('Equlized image histogram')

licensed under cc by-sa 3.0 with attribution.