直方图规定化直方图均衡化的优点是能自动增强整个图像的对比度,但它的具体增强效果不易控制,处理的结果总是得到全局的均衡化的直方图.实际工作中,有时需要变换直方图使之成为某个特定的形状,从而有选择地增强某个灰度值范围内的对比度,这时可采用比较灵活的直方图规定化方法.直方图规定化增强处理的步骤如下:令Pr(r)和Pz(z)分别为原始图像和期望图像的灰度概率密度函数。如果对原始图像和期望图像均作直方图均衡化处理,应有: 由于都是进行均衡化处理,处理后的原图像概率密度函数Ps(S)及理想图像概率密度函数PV(V)是相等的。于是,我们可以用变换后的原始图像灰度级S代替(2)式中的V。即:Z = G - 1(S) 这时的灰度级Z 便是所希望的图像的灰度级。此外,利用(1)与(3)式还可得到组合变换函数Z = G - 1[T(r)] 对连续图像,重要的是给出逆变换解析式。对离散图像而言,有clear all; close all; clc;I = imread("2-t.bmp"); L=256; NK=zeros(L,1); %存储原图像直方图数据 Rk_CDF_Normal=zeros(L,1); %存储直方图规定化后的图像的直方图 Rk_pre=zeros(L,1); %存储原图像累积直方图数据 [row,col]=size(I);%% %获取像素灰度级 for i = 1:row for j = 1:col num = double(I(i,j))+1; NK(num) = NK(num)+1; end end%计算直方图概率估计 Ps = NK./numel(I);%存储原图像直方图概率数据 %计算累积直方图 for level=1:L if level==1 Rk_pre(level)=Ps(level); else Rk_pre(level)=Rk_pre(level-1)+Ps(level); end end%% %规定化直方图,在这里要得到2-s图像的灰度直方图 H = imread("2-s.jpg"); H = rgb2gray(H); nk_normal = zeros(L,1); Rk_normal = zeros(L,1); [row,col] = size(H);%获取像素灰度级 for i = 1:row for j = 1:col num_normal = double(I(i,j))+1; nk_normal(num_normal) = nk_normal(num_normal)+1; end end%计算直方图概率估计 Ps_normal = nk_normal./numel(H); for level=1:L if level==1 Rk_normal(level)=Ps_normal(level); else Rk_normal(level)=Rk_normal(level-1)+Ps_normal(level); end end%计算规定化累积直方图 for level=1:L if level==1 Rk_CDF_Normal(level)=Rk_normal(level); else Rk_CDF_Normal(level)=Rk_CDF_Normal(level-1)+Rk_normal(level); end end%% %计算原图像与目标图像累计直方图数值的差的绝对值 double ScMin=zeros(L,L); for y=1:L for x=1:L ScMin(x,y)=abs(Rk_pre(y)"-Rk_CDF_Normal(x)"); end end %建立映射 HisM=zeros(L:1); for level_x=1:L min = 0; minV=ScMin(1,level_x); for level_y=1:L if(minV>ScMin(level_y,level_x)) minV=ScMin(level_y,level_x); min = level_y; end end HisM(level_x)= min; end%将原图像的每个像素灰度转换为直方图均衡化后的灰度 [row,col]=size(I); New=I; for x = 1:row for y = 1:col Num = double(I(x,y))+1; if Num==L New(x,y)=HisM(L); end end end figure;imshow(New),title("规定化后图像");