直方图均衡化

来源:互联网 发布:ado.net mysql 编辑:程序博客网 时间:2024/06/07 15:36

直方图均衡化

 

1、直方图均衡化

    直方图均衡化处理是以累积分布函数变换法为基础的直方图修正法。假定灰度变换函数为

 

就是 r 的累积分布函数。

       累积分布函数是 r 的函数,并且单调地从 0 增加到 1 ,所以这个变换函数满足

      (1)关于 T(r) 在 0 <= r <= 1 内单值单调增加;

      (2)在 0 <= r <= 1 内有 0 <=T(r) <= 1 ;

       两个条件。

       令 Pr(r) 、 Ps(s) 分别为均衡化前和均衡化后的概率密度函数。

 

2、实现代码

%% 图像的直方图均衡化% 作者:杨宇东% 日期:2014.09.22% 参数:待均衡化的图片的文件名% 输出:均衡化处理之后的图片数组%%function f = MyHistogramEqulization(imgFile)img = imread(imgFile);imshow(img);title('源图片');height = size(img, 1);width = size(img, 2);% 图像中所有的像素的个数numPixel = height * width;% 各个灰度出现的频数frequency = zeros(256, 1);% 各个灰度出现的概率probability = zeros(256, 1);% 统计各个灰度的频数,计算各个灰度的概率for i = 1:height    for j = 1:width        value = img(i,j);        frequency(value + 1) = frequency(value + 1) + 1;        probability(value + 1) = frequency(value + 1) / numPixel;    endend% 各个灰度的累积分布fPixel = zeros(256, 1);% 各个灰度的累积分布概率pPixel = zeros(256, 1);% 重新定义的灰度值imgNew = zeros(256, 1);% 累积和变量sum = 0;for i = 1:size(probability)    sum = sum + frequency(i);    fPixel(i) = sum;    pPixel(i) = fPixel(i) / numPixel;    % 计算映射的灰度值    imgNew(i) = round(pPixel(i) * 255);end% 生成新的图像数组。 uint8 是指生成 8 位图像数组,节约存储空间。f = uint8(zeros(height, width));for i = 1:height    for j = 1:width        f(i, j) = imgNew(img(i, j) + 1);    endendfigure, imshow(f);title('均衡化之后的图片');        


0 0
原创粉丝点击