失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > MATLAB | 画彩色图像的直方图 改对比度 计算均值 方差和信息熵

MATLAB | 画彩色图像的直方图 改对比度 计算均值 方差和信息熵

时间:2019-03-01 05:50:30

相关推荐

MATLAB | 画彩色图像的直方图 改对比度 计算均值 方差和信息熵

MATLAB | 画彩色图像的直方图,改对比度,计算均值、方差和信息熵

何为直方图,就是一幅图像的像素分布情况的条形图。如一幅RGB图像灰度化后,其像素均在在0-255范围内。以matlab里函数***h=imhist(f,b)***为例:

f是输入图像,b表示容器,如b为10,那么横坐标就有25个区间段。

彩色图像、红绿蓝图像分量、灰度图像都可以画出直方图。直方图对后续的图像增强、压缩、分割描述具有重要作用(后面再更啦),如调制图像的对比度那么像素分布肯定有变化,而且可以通过直方图看出变换明显的地方,如峰值。

当然绘制直方图还可以用***bar、stem、plot函数***,因为第一次分享博客是入学之前的小作业,这些也是后面慢慢摆上来。

在介绍方差均值之前说说,在matlab里如何得到具体数值吧 hhh这也是我开始没有具体做之前想的一个小问题。就是用matlab里自带的size函数

[M,N]=size(f)返回图像的行和列的数目,然后f(i,j)可得具体像素值,有此之后,其他的都是简单的数学知识,有些许c语言基础应该很快编出来!

下面就是具体matlab代码

// clc;A1=imread('D:\MATshujialianxi\tushuguan.jpg');subplot(4,4,1);imshow(A1);title('原图');Ar=A1(:,:,1);%R通道 Ag=A1(:,:,2);%G通道 Ab=A1(:,:,3);%B通道 subplot(4,4,4),imshow(A1(:,:,1));title('红色分量图'); %R通道 subplot(4,4,7),imshow(A1(:,:,2));title('绿色分量图'); %G通道 subplot(4,4,10),imshow(A1(:,:,3));title('蓝色分量图'); %B通道 %subplot(A,B,K)可以在一张figure里显示多张图片,A,B意思是几行几列的图片,K是那行的第几个图,是图片的话后面用imshow,直方图用imhist,,,,title是该小图的标题,一般默认居中。%h=imhist(f,b);f为输入图像,b意为将0-256区间分为256/b个区间段;%imhist( i );直接显示图像i的灰度直方图;%imhist(i,n)n为指定灰度级显示直方图;%[count, x] = imhist( i ) 获取直方图信息,count为每一级灰度像素个数,x为灰度级subplot(4,4,5),imhist(Ar);title('红色分量直方图');subplot(4,4,8),imhist(Ag);title('绿色分量直方图');subplot(4,4,11),imhist(Ab);title('蓝色分量直方图');subplot(4,4,6),imhist(Ar,10);title('红色指定灰度级');subplot(4,4,9),imhist(Ag,25);title('绿色指定灰度级');subplot(4,4,12),imhist(Ab,50);title('蓝色指定灰度级');if length(size(A1))>2%size获得矩阵的大小,length获得矩阵最大维度A1=rgb2gray(A1);end%上面if语句可以自动判断是否为彩色图像,都会转化成二维的灰度图subplot(4,4,2);imshow(A1);title('原图灰度化');subplot(4,4,3);imhist(A1);title('原直方图');%用imadjust对灰度图像进行灰度变换,用histeq进行直方图均衡处理ima=imadjust(A1);%按默认参数进行对比度调整his=histeq(A1);%按默认参数对直方图进行均衡化subplot(4,4,13);imshow(ima);title('对比度默认拉伸图');subplot(4,4,14);imhist(ima);title('对比度默认拉伸后的直方图');subplot(4,4,15);imshow(his);title('灰度图均衡后图');subplot(4,4,16);imhist(his);title('灰度图均衡后直方图');%求图像矩阵均值、方差、信息熵%求矩阵所有元素(像素)的和[row,col]=size(A1);%获取行数 和 列数A1=double(A1);%要先转换成double 否则不能实现累加,matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算sum=0; for i=1:rowfor j=1:colsum=sum+A1(i,j);endend%disp(sum);%求均值mid=sum/(row*col);disp(['均值mid:',num2str(mid)]);%求方差s=0;for x=1:rowfor y=1:cols=s+(A1(x,y)-mid)^2;%求得所有像素与均值的平方和。endendvar=s/(row*col);%方差disp(['方差var:',num2str(var)]);%求信息熵,通信原理上面有[M,N]=size(A1);temp=zeros(1,256);%设置空白矩阵,用于记录概率,一行256列的0矩阵。for m=1:Mfor n=1:Nif A1(m,n)==0%如果数值为0i=1;%序号为1elsei=A1(m,n);%否则为原来序号endtemp(i)=temp(i)+1;%统计每个灰度值出现的次数endendtemp=temp/(M*N);%所有值除以元素个数,表示概率 即公式中的P(i)com=0;for i=1:length(temp)%返回temp的行列中的最大值 即256if temp(i)==0%如果概率为0 则不累加 0要单独处理elsecom=com-temp(i)*log2(temp(i));endenddisp(['信息熵com:',num2str(com)]);

原图(不知道会不会有校友看见这熟悉的场景!)

变换之后的图

具体均值方差数字如下

啦啦啦!加油冲! 希望能给自己不断总结,进步的同时,能帮助到其他学习者!奋斗者!

本文参考了冈萨雷斯的数字图像处理,大家可以学学,基础版,学到就是自己的!!!

和其他大佬的一些具体步骤,总的来说,自己学到了这些知识,一起进步!

/piaoxuezhong/article/details/78269439

如果觉得《MATLAB | 画彩色图像的直方图 改对比度 计算均值 方差和信息熵》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。