デジタル画像処理実験(1) - ヒストグラム平坦化

実験のトピック:

グレースケールおよびカラー画像のヒストグラム等化をプログラミングします。使用される場合、元の画像のヒストグラム等化と画像の階調変換曲線ヒストグラム等化及びヒストグラムを与えるために必要。カラー画像は、輝度チャネル上でHSI変換およびヒストグラム等化にRGB色空間画像によってプログラミング必要とすることに注意。

出典:

使用される場合、グレースケール画像処理、階調変換曲線は、元の画像の図のヒストグラム、及び画像のヒストグラム等化ヒストグラム等化に与えられています

// 灰度图像
clear 
%读入彩色图像将其灰度化
pic=imread('grey.png');	
imshow(pic)		%显示出来
title('输入的灰色png图像')

%绘制直方图
[m,n]=size(pic);	%测量图像尺寸参数
GP=zeros(1,256);	%预创建存放灰度出现概率的向量
N=zeros(1,256);
for k=0:255
    N(k+1) = length(find(pic==k));    
    GP(k+1)=length(find(pic==k))/(m*n); 	% 计算每级灰度出现的概率,将其存入 GP 中相应位置
end
figure,bar(0:255,GP,'b')	%绘制直方图title('原图像直方图')
xlabel('灰度值') 
ylabel('出现概率')

%直方图均衡化
CF=zeros(1,256);
for i=1:256
    for j=1:i
        CF(i)=GP(j)+CF(i);	%计算 Sk
    end
end
S2=round((CF*256)+0.5);	%将 Sk 归到相近级的灰度
for i=1:256
    GPeq(i)=sum(GP(find(S2==i)));	%计算现有每个灰度级出现的概率
end
figure,bar(0:255,GPeq,'b')	%显示均衡化后的直方图title('均衡化后的直方图')
xlabel('灰度值') 
ylabel('出现概率')

%图像均衡化
PA=pic;
for i=0:255
PA(find(pic==i))=S2(i+1);	%将各个像素归一化后的灰度值赋给这个像素
end
figure,imshow(PA)	

%绘制灰度级变换曲线
figure
plot(0:255,S2,'r')
xlabel('均值化前')
ylabel('均值化后')
grid on
legend('灰度级变换曲线');

原画像のヒストグラム等化と画像の階調変換曲線と図与えられ、カラー画像を処理するときに使用されるヒストグラム等化ヒストグラム。カラー画像は、次に、HSI変換にRGB色空間画像によってプログラミング必要とすることを注意輝度チャネルにヒストグラム等化。

// 彩色图像
function pic2()
clear;
pic=imread('color.jpg');	%读入 JPG 彩色图像文件
imshow(pic)		%显示出来
title('原图像');

[M,N,D] = size(pic);
%提取单通道分量
pic=double(pic);
r=pic(:,:,1);
g=pic(:,:,2);
b=pic(:,:,3);
%实现转换
angle=acos(0.5*((r-g)+(r-b))./(sqrt((r-g).^2+(r-b).*(g-b))));
if (b>=g)
    H = 2*pi-angle;
else
    H = angle;
end
H=H/(2*pi);
S=1-3.*(min(min(r,g),b))./(r+g+b);
H(S==0)=0;
I=(r+g+b)/3;
I=uint8(I);%范围不超[0,255]
%统计像素亮度
INumPixel = zeros(1,256);%用长度为256的一维数组统计各灰度值的数目
for i = 1:M  
    for j = 1: N  
        INumPixel(I(i,j) + 1) = INumPixel(I(i,j) + 1) + 1;  
    end  
end  
%亮度直方图
GP = zeros(1,256);  
for i = 1:256  
    GP(i) = INumPixel(i) / (M * N * 1.0);  
end  
figure,bar(0:255,GP,'b')	%绘制直方图title('原图像直方图')
xlabel('亮度值') 
ylabel('出现概率')

%直方图均衡化
S2 = zeros(1,256);  
for i = 1:256  
    if i == 1  
        S2(i) = GP(i);  
    else  
        S2(i) = S2(i - 1) + GP(i);  
    end  
end  
                                %S2乘上最大灰度255并且向上取整  
S2 = uint8(255 .* S2 + 0.5);  
                                %将原图像各个位置灰度值映射到新值  
for i = 1:M  
    for j = 1: N  
        Inew(i,j) = S2(I(i,j)+1);  
    end 
end
for i=1:256
    GPeq(i)=sum(GP(find(S2==i)));	%计算现有每个灰度级出现的概率
end
figure
plot(0:255,GPeq,'b')	%显示均衡化后的直方图title('均衡化后的直方图')
xlabel('亮度值') 
ylabel('出现概率')

%绘制亮度级变换曲线
figure
plot(0:1:255,S2,'r')
xlabel('均值化前')
ylabel('均值化后')
grid on
legend('亮度级变换曲线');

I=Inew;
H=H*2*pi;
I=double(I);
S=double(S);
H=double(H);
[m,n]=size(H);
%转换
for i = 1:m
    for j = 1:n
        if (0<=H(i,j))&(H(i,j)<2*pi/3)
            B(i,j)=I(i,j).*(1-S(i,j));
            R(i,j)=I(i,j).*(1+S(i,j).*cos(H(i,j))./cos(pi/3-H(i,j)));
            G(i,j)=3*I(i,j)-(R(i,j)+B(i,j));
        end
        if (2*pi/3<=H(i,j))&(H(i,j)<4*pi/3)
            H(i,j)=H(i,j)-2*pi/3;
            R(i,j)=I(i,j).*(1-S(i,j));
            G(i,j)=I(i,j).*(1+S(i,j).*cos(H(i,j)-2*pi/3)./cos(pi-H(i,j)));
            B(i,j)=3*I(i,j)-(R(i,j)+G(i,j));
        end
        if (4*pi/3<=H(i,j))& (H(i,j)<2*pi)
            H(i,j)=H(i,j)-4*pi/3;
            G(i,j)=I(i,j).*(1-S(i,j));
            B(i,j)=I(i,j).*(1+S(i,j).*cos(H(i,j)-4*pi/3)./cos(5*pi/3-H(i,j)));
            R(i,j)=3*I(i,j)-(G(i,j)+B(i,j));
        end
    end
end

output3=cat(3,R,G,B);
output3=uint8(output3);
figure
imshow(output3)

実験結果

グレースケール画像
グレーのアートワーク ここに画像を挿入説明
ここに画像を挿入説明 ここに画像を挿入説明
ここに画像を挿入説明

カラー画像
ここに画像を挿入説明ジンハン・ワード秋

ここに画像を挿入説明 ここに画像を挿入説明
ここに画像を挿入説明

コントラスト画像と等化後の原画像、ヒストグラム等化コントラストヒストグラム後に原画像、等化後のより均等に階調値のヒストグラムによって、画像全体に集中していません。

リリース8元の記事 ウォンの賞賛5 ビュー143

おすすめ

転載: blog.csdn.net/qq_41650371/article/details/105361874