赞
踩
假定变换函数为:
由上述推导可知ps(s)(输出灰度级的概率密度函数)是均匀为1的,换句话说就是由变换函数得到的图像的灰度级是等概率的。而且,注意到这变换函数是一个累积分布函数(CDF)。
均衡化过程中,必须要保证两个条件:①像素无论怎么映射,一定要保证原来的大小关系不变,较亮的区域,依旧是较亮的,较暗依旧暗,只是对比度增大,绝对不能明暗颠倒;②如果是八位图像,那么像素映射函数的值域应在0和255之间的,不能越界。综合以上两个条件,累积分布函数都满足,因为累积分布函数是单调增函数(控制大小关系),并且值域是0到1(控制越界问题)。
那么在计算灰度级为离散图像时,我们用每个灰度值在整幅图像中出现的频率作为该灰度值的概率,因此离散形式的均衡化变换成为以下形式:
<span style="font-family:SimSun;">function [output_img] = my_HistEqual( input_img )
%UNTITLED2 Summary of this function goes here
% Detailed explanation goes here
% 图像直方图均衡化处理函数
[height,width,channels]=size(input_img);
if channels==1
src = inpit_img;
else
src = rgb2gray(input_img);
end
%1.像素灰度统计
NumPixel = zeros(1,256);
for i=1:height
for j=1:width
grayValue = src(i,j);
NumPixel(1,grayValue+1) = NumPixel(1,grayValue+1)+1;
end
end
%2.计算灰度分布密度
ProbPixel = zeros(1,256);
for k=1:256
ProbPixel(1,k)=NumPixel(1,k)/(height*width*1.0);
end
%3.计算累积分布密度
CumuPixel = zeros(1,256);
CumuPixel(1,1) = ProbPixel(1,1);
for l=2:256
CumuPixel(1,l) = CumuPixel(1,l-1)+ProbPixel(1,l);
end
CumuPixel = uint8(255 .* CumuPixel + 0.5); %取整数
%4.计算灰度值映射
output_img = zeros(height,width);
for m=1:height
for n=1:width
output_img(m,n) = CumuPixel(src(m,n));
end
end
output_img = uint8(output_img);
end
</span>
自适应直方图均衡化(AHE)用来提升图像的对比度的一种计算机图像处理技术。和普通的直方图均衡算法不同,AHE算法通过计算图像的局部直方图,然后重新分布亮度来来改变图像对比度。因此,该算法更适合于改进图像的局部对比度以及获得更多的图像细节。
function [ output_img ] = my_AHE( input_img, w)
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
% 自适应直方图均衡化
% 输入:input_img:待处理图像
% w: 局部处理的窗口大小
[height,width,channels]=size(input_img);
if channels==1
src = inpit_img;
else
src = rgb2gray(input_img);
end
%1.图像边界扩展
padsize=[(w-1)/2,(w-1)/2];
padSrc = padarray(src,padsize,'symmetric','both');
%2.循环求解每个区域对应的值
output_img = zeros(height,width);
iter = 0;
for i=1:height
for j=1:width
slideWindow = zeros(w,w);
slideWindow = padSrc(i:i+w-1,j:j+w-1);
AHE_piexl = my_AHE_piexl(slideWindow,src(i,j));
output_img(i,j) = AHE_piexl;
iter = iter+1;
disp(iter);
end
end
output_img = uint8(output_img);
end
function [ outPiexl ] = my_AHE_piexl( window,inPiexl )
%UNTITLED2 Summary of this function goes here
% Detailed explanation goes here
% 计算局部图像的直方图均衡化的像素对应值
% 输入:window: 局部图像
% inPiexl:输入像素
% outPiexl:输出像素
[height,width]=size(window);
%1.像素灰度统计
NumPixel = zeros(1,256);
for i=1:height
for j=1:width
grayValue = window(i,j);
NumPixel(1,grayValue+1) = NumPixel(1,grayValue+1)+1;
end
end
%2.计算灰度分布密度
ProbPixel = zeros(1,256);
for k=1:256
ProbPixel(1,k)=NumPixel(1,k)/(height*width*1.0);
end
%3.计算累积分布密度
CumuPixel = zeros(1,256);
CumuPixel(1,1) = ProbPixel(1,1);
for l=2:256
CumuPixel(1,l) = CumuPixel(1,l-1)+ProbPixel(1,l);
end
CumuPixel = uint8(255 .* CumuPixel + 0.5); %取整数
%4.计算灰度值映射
outPiexl = CumuPixel(inPiexl);
end
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。