Matlab 彩色图片直方图均衡化处理 line()函数实现

来源:互联网 发布:matlab 将矩阵归一化 编辑:程序博客网 时间:2024/06/01 17:46

好了,不说这么多了,直奔主题,本次分别做了两次实现,分别是:彩色图片转灰度图直方图均衡化处理以及彩色图片的直方图均衡化处理,大家可以按需观看。

一、程序源码
(1)彩色图片转灰度图直方图均衡化处理:

%读取图片I=imread('test.jpg');%将图片转化成灰度图片I=rgb2gray(I);%显示原图像figure(4),imshow(I);%获得灰度图的长和宽[M,N]=size(I);%做直方图均衡化处理,设置初始参数average=0;%做直方图均衡化处理,创建映射区域A=zeros(1,256);%获得每一个点的灰度值,并判断其值等于多少for k=1:256    count=0;    for i=1:M        for j=1:N        value=I(i,j);        %统计灰度值        if value==k            count=count+1;        end     end     end   %画出图像灰度直方图   figure(1),line([k,k],[0,count]);   %直方图均衡化处理   count=count/(M*N*1.0);   average=average+count;   %获得灰度映射   A(k)=average;   %画出均衡化后的直方图   figure(2),line([k,k],[0,average]);end%累计分布取整,+0.5等于四舍五入,也就是取整A=uint8(255.*A+0.5);%进行直方图反映射,得到处理后的原图像for i=1:M    for j=1:N        I(i,j)=A(I(i,j));    endend%展示处理后图像figure(3),imshow(I);

实验结果截图:
这里写图片描述

(2)彩色图片的直方图均衡化处理
彩色图片的直方图均衡化处理与灰度图的处理方法一样,不同的地方在于要分别把R、G、B层做一次处理,也就是处理三次,而灰度图像就只需要处理灰度值就行,这就是两者唯一的不同。因此,原理懂了,就不难实现了

%读取图片I=imread('test.jpg');figure(7),imshow(I);%获取图片的长、宽和层数(其实等于三,R、G、B三层)[M,N,G]=size(I);result=zeros(M,N,3);%获得每一层每一个点的RGB值,并判断其值等于多少for g=1:3    A=zeros(1,256);    %每处理完一层,参数要重新初始化为0    average=0;    for k=1:256        count=0;        for i=1:M            for j=1:N                value=I(i,j,g);                if value==k                    count=count+1;                end            end        end        figure(g),line([k,k],[0,count]);        count=count/(M*N*1.0);        average=average+count;        A(k)=average;        figure(g+3),line([k,k],[0,average]);    end    A=uint8(255.*A+0.5);    for i=1:M        for j=1:N            I(i,j,g)=A(I(i,j,g)+0.5);        end    end  end%展示处理效果figure(8),imshow(I);

实验结果截图:
这里写图片描述

以上,就是如何运用line()函数来画直方图以及如何通过对直方图进行处理来处理图片的运用啦。个人觉得不足的地方在于for循环用的有些多,程序看起来有点臃肿,希望有大神能够指点一二。

原创粉丝点击