Matlab 实现直⽅图均衡化(基于⾃定义函数)
Matlalb 实现直⽅图均衡化
直⽅图均衡化
直⽅图均衡化是⼀种使输出图像直⽅图近似服从均匀分布的变换算法,其计算步骤如下:
1. 列出原始图像的灰度级,j=0,1,…,k,…,L-1,其中L是灰度级的个数。
2. 统计各灰度值的像素数⽬, j=0,1,…,k,…,L-1。
3. 计算原始图像直⽅图各灰度级的频度Pj=,j=0,1,2,…,k,…,L-1,其中n为原始图像总的像素数⽬。
4. 计算累计分布函数C(f)=,j=0,1,2,…,k,…,L-1。
5. 应⽤以下公式计算映射后的输出图像的灰度级,i=0,1,…,k,…,P-1,P为输出图像灰度级的个数:=INT[ (-)C(f)++0.5 ]
式中,INT为取整符号。
6. 统计映射后各灰度级的像素数⽬,i=0,1,…,k,…,P-1。
7. 计算输出图像直⽅图()=,i=0,1,…,k,…,P-1。
8. ⽤和的映射关系修改原始灰度级,从⽽获得直⽅图近似为均匀分布的输出图像。Matlab 代码实现
Histogram_equalization.m
f j N j n Nj
P (f )i =0∑k j j g i g i g max g min g min n i P g g i n n i f j g i
function [output]= Histogram_equalization(input_image)
if numel(size(input_image))==3%如果图像为rgb图像
%this is a RGB image
%here is just one method,if you have other ways to do the %equalization, you can change the following code
r=input_image(:,:,1);
v=input_image(:,:,2);
b=input_image(:,:,3);
r1 = hist_equal(r);
v1 = hist_equal(v);matlab直方图
b1 = hist_equal(b);
output = cat(3,r1,v1,b1);
else%图像为灰值图像
[output]= hist_equal(input_image);
end
function [output2]= hist_equal(input_channel)
[m,n]=size(input_channel);
output2=zeros(m,n);
N=zeros(256,1);
P=zeros(256,1);
C=zeros(256,1);
for i=1:m                    %统计各灰度级个数
for j=1:n
N(input_channel(i,j)+1)=N(input_channel(i,j)+1)+1;
end
end
for i=1:256%计算原始图像直⽅图各灰度级的频度            P(i)=N(i)/(m*n);
end
C(1)=P(1);%计算累计分布函数
for i=2:256
C(i)=C(i-1)+P(i);
end
for i=1:m                  %通过映射关系获得输出直⽅图
for j=1:n
output2(i,j)=floor(255*C(input_channel(i,j)+1)+0.5);
end
end
output2=uint8(output2);
end
end
代码效果展⽰
展⽰代码 test.m
clc;
clear;
close all;
I = imread('d:\test.jpg');
[J]= Histogram_equalization(I);
subplot(221), imshow(I);
subplot(222), imhist(I);
subplot(223), imshow(J);
subplot(224), imhist(J);
[1] MATLAB数字图像处理.张德丰.扫描版

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。