在matlab中的图像矩阵上应用新的均衡直方图

时间:2013-06-25 17:04:16

标签: image matlab image-processing histogram

假设基于我的my previous question 我已经均衡了图像的直方图,现在问题是如何在图像上应用这个新的均衡直方图?
我的意思是从新的均衡直方图中获取新图像的算法是什么? 我见过a code about this in the net.
很明显,这张照片中显示的最后一个for循环用于在图像矩阵上应用均衡的直方图 enter image description here
但我不明白使用的算法 再次注意,这是一项大学任务,我不允许使用图像处理工具箱中提供的内置函数。

2 个答案:

答案 0 :(得分:0)

我找到了在图像矩阵here上应用新的均衡直方图的算法 帮助我的这个网页的具体部分如下图所示:
enter image description here
我为实现这个算法而编写的代码在this link.中 注意文件中的第22到24行" HistogramEqualization"为灰度图像实现上述算法。并且RGB的代码是相同的,除了它应该针对每个颜色通道重复。

答案 1 :(得分:0)

  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=uint8(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')