1、通过图像反色变换,每一个像素点的变换前后的灰度值之和为白色(255)。图像反色的变换公式为 (3)当L取为256时,实现图像反转变色2、非线性灰度变换除了图像灰度的线性变换外,还有非线性灰度变换。非线性灰度变换不是对图像的所有灰度值进行拉伸,一部分被拉伸,另一部分则会被压缩。非线性灰度变换在整个灰度值围采用统一的变换函数。比较常见的有对数变换和幂律(伽马)变换等。1)对数变换设原图像为f(x,y),变换后的图像为g(x,y),对数变换的变换函数为 (4)(4)式中,c是一个比例因子,log是求以e为底的数值的对数,原图像灰度值加1的目的是保证对数变化对于任何灰度值都有意义。c取适当的值,可得到
2、对数变换的函数图像如图2所示。图2 对数变换函数曲线由图2可知,通过对数变换,对于较低的灰度值起到较大程度的拉伸作用,而对于较高的灰度值起到压缩作用,从而将整幅图像的灰度值均匀化。2)幂律(伽马)变换伽马变换可通过调节幂指数参数来改变其变换特性,设f(x,y)和g(x,y)分别为变换前后的图像,为幂指数,c为比例系数,则伽马变换的公式如下 (5)对于c为正值的情况,当1时,伽马变换将低灰度值压缩,高灰度值拉伸;当1 I1=rgb2gray(I1); %满足条件,将看似为黑白图的多通道图转化为灰度图endI1=double(I1); %将图片灰度的数据类型转变为double型%这一部转化很重要,
3、在后续的计算中,尤其是除法,运算结果能保证更高的精度lo,wi=size(I1); %获得矩阵I1的行列尺寸,以备单个像素处理时的循环算法a=min(min(I1); %得到原图(I1)所有像素灰度的最小值b=max(max(I1);I2=zeros(lo,wi); %初始化矩阵I2,为处理后的图像分配存c=10;d=250; %设置灰度线性拉伸后的灰度最小值和最大值%接下来,对矩阵I1中的逐个像素进行线性灰度变换,并存到I2相应位置for i=1:lo for j=1:wi I2(i,j)=(d-c)/(b-a)*(I1(i,j)-a)+c; %线性灰度变换公式 endI1=mat2gray
4、(I1);I2=mat2gray(I2); %将变换后的矩阵I1、I2转换为8位整型subplot(2,2,2),imshow(I2); %在一22图的第2个位置显示I2线性灰度变换后的图片imwrite(I2,线性灰度变换后的图片.bmp,bmp) %以另一个文件名形式保存图像subplot(2,2,3),imhist(I1); %在一22图的第3个位置显示I1的灰度直方图ylim(0,7000),title(原图片灰度直方图subplot(2,2,4),imhist(I2);2图的第4个位置显示I2的灰度直方图变换后图片灰度直方图% 画灰度变换曲线x=0:255; %设置0到255共256
5、级灰度级y=zeros(1,256); %设置全0向量,为线性灰度变换后的数值分配存%按灰度级,从0到255开始循环,即x(1)到x(256)256 if x(i)=a&x(i)=b y(i)=(d-c)/(b-a)*(x(i)-a)+c; %当原图灰度介于a,b之间,用公式变换b y(i)=d;figure,plot(x,y) %创建新的图片窗口,显示变换函数曲线线性变换曲线图),xlim(0,255),ylim(0,255)ylim(0,255); %限定横坐标围为0到255% 对图像做非线性变换Ein.jpg %读取图像文件Ein.jpg,赋值给矩阵I1figure,imshow(I1)
6、; %创建一个图像显示窗口并显示图像原图像) %满足条件,将三通道的图片变为灰度图 %将图片的数据类型转变为double型,以便后续计算准确 %得到矩阵I1的行数和列数,即像素个数I3=zeros(lo,wi); %创建两个全零矩阵用于存放对数和伽马变换后的矩阵% 对图像做对数变换c=5;d=1/255; %令对数变换中的比例系数为5,伽马变换中的比例系数为1/255%对每一个像素的灰度值,用循环分别进行变换 I2(i,j)=c*log(1+I1(i,j); %对数变换公式 %必须将double型的矩阵还原为8位整型才能显示figure,imshow(I2,) %显示时由于灰度太低,需要MAT
7、LAB的部方式进行拉伸通过对数变换后的图像通过对数变换后的图像.bmp) %保存成一个新的文件% 对图像做伽马变换 I3(i,j)=d*I1(i,j)2; %伽马变换公式,指数为2I3=mat2gray(I3); %还原为整型figure,imshow(I3,) %创建图像窗口,也要伸展显示通过伽马变换后的图像imwrite(I3,通过伽马变换后的图像.bmp) %保存成一个新文件% 显示对数变换和伽马变换的函数曲线y1=zeros(1,256);y2=zeros(1,256); %规定x坐标,并且为非线性变换后的数值分配存%对每一个灰度级进行相应的变换 y1(i)=c*log(1+x(i);
8、 y2(i)=d*x(i)2;figureplot(x,y1),hold on %在同一幅坐标图上绘制两个变换函数plot(x,y2)xlim(0,255),ylim(0,255) %创建新窗口,显示对数,伽马变换曲线图% 读取原图像,并绘制原图像在两种定义下的直方图youngboy.jpg %读取图像文件youngboy.jpg并赋值给I1figure,imshow(I1) %创建一个图像窗口,显示图像youngboy.jpg原图 %满足条件时将彩图灰度化 %获取图像矩阵的长和宽greylevel=0: %创建存储灰度级的向量hi=zeros(1,256); %为各灰度级的像素数目分配存p=
9、zeros(1,256);%为各灰度级的像素出现的频率分配存hi(i)=length(find(I1=greylevel(i); %寻找等于第i个灰度级的像素并统计个数p(i)=hi(i)/(lo*wi*1.0); %统计上式结果出现的频率,其中分母出现1.0是为了采用double型进行操作%创建一个图像窗口,同时显示两种顶一下的直方图,灰度级为横坐标,hi和p为纵坐标subplot(2,1,1),stem(greylevel,hi)xlim(0,255)原图灰度级出现的次数直方图subplot(2,1,2),stem(greylevel,p)原图灰度级出现的频率直方图% 直方图的均衡化s=zeros(1,256);s(1)=p(1);for i=2: s(i)=p(i)+s(i-1); %对于每一个灰度级出现的概率,进行累加操作H=round(255*s); %用255与求和结果相乘,并四舍五入,将相似的灰度级归为一起 %为均衡化的图像分配存%对新图的每一个像素的灰度级进行操作 for j=
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1