图像增强的点运算(一)

% 图像增强算法并不能增加原始图像的信息,而是通过某种技术手段有选择地突出对某一具体应用价值的信息

%灰度线性变换
%1:全域线性变换,假定原图像f(x,y)的灰度范围为[a,b],希望变换后图像g(x,y)的灰度范围扩展至
% [c,d],则线性变换表达式为: g(x,y)=[(d-c)/(b-a)]*(f(x,y)-a)+c
%采用线性变换对图像每一个像素灰度作线性拉伸呢,可有效改善图像视觉效果
%可以改变真个图像的整体的灰度效果
mimg=imread("pout.tif");%这个是程序自带的图片
subplot(221);imshow(mimg);
subplot(223);imhist(mimg);%imhist展示直方图
mimg=double(mimg);
va=min(min(mimg));%因为是二维所以需要两个min,求出二维数组中的最小值,
% 单独一个min求出的是一个数组,数组元素是原先二维数组每一列的最小值
vb=max(max(mimg));
vc=0.0;
vd=255.0;
mimg1=(vd-vc)/(vb-va)*(mimg-va)+vc;
mimg1=uint8(mimg1);
subplot(222);imshow(mimg1);
subplot(224);imhist(mimg1);

%反相变换。也就是将白的变成黑的,将黑的变成白的
a=imread('pout.tif');
b=255-a;
figure;
subplot(121),imshow(a);
subplot(122),imshow(b);


%2:分段线性变换。为了突出感兴趣的目标或灰度空间,相对抑制那些不感兴趣的灰度区间
%3段公式:
%g(x,y)=   c/af(x,y)  0<=f(x,y)<a
%        [(d-c)/(b-a)][(f(x,y))-a]+c   a<=f(x,y)<b
%       [(Mg-d)/(Mf-b)][f(x,y)-b]+d     b<=f(x,y)<=Mf
% 削波,可以看作是上述的一个特例。例如,就是将其中第1段置为0,第三段置为255,只有中间一段有一个变换的范围
% 阈值化,可以看做是削波的一个特例,就是其中只有两部分,一个全为0,另一个全为255



% 3:对数变换,一般表达式  g(i,j)=a+ln[f(i,j)+1]/(blnc)
%可以使用更简化的形式   F=log(1+F)  
% matlab中,自然对数 log(x)    以10为底 log10(x)  以N为底longN(x)
% 应用:将变化范围较大的灰度级压缩到较小的范围内。增强较暗区的对比,减弱较亮区的对比
% 这是因为,log之后再归一化,那么原先比较亮的地方可能就会变为比较暗的区域,这根log的图线形状有关



% 4:指数变换。可以对图像的高灰度区给予较大的拉伸。
% 一般表达式 g(i,j0=b^(c[f(i,j)-a])-1
%其中伽马变换:g(i,j)=cf(i,j)^r
% r<1:将增强教案区域的对比,减弱较亮区域的对比。其实也就是让图像变亮
% r>1与上面相反


%5:直方图均衡
% 一幅图像的像素若占有全部的灰度级且分布均匀,就能够具有高对比度
% 灰度级变换,新图像中每个店的灰度s是改点原始灰度r的变换的结果。s=T(r)
% 基本思想:把原始图的直方图变换为均匀分布的形式(对再图像中像素个数多的灰度级进行展宽,
% 而对像素个数少的灰度级进行缩减),这样增加了像素灰度值的动态范围,从而达到增强图像整体对比度的效果
i=imread("pout.tif");
j=histeq(i);%这个函数就是直方图均衡化的函数
subplot(221),imshow(i);
subplot(222),imshow(j);
subplot(223),imhist(i);
subplot(224),imhist(j);

  

posted @ 2020-11-09 21:00  白菜茄子  阅读(545)  评论(0编辑  收藏  举报