• 第二章灰度变换笔记


    灰度变换函数

    1.g=imadjust(f,[low_in,high_in],[low_out,high_out],gammma):

    (1)输入图像low_in到high_in的灰度级映射到输出图像low_out,high_out之间。输入和输出图像属于同一类。除了f,gamma以外的其他参数都在0到1之间。如果high_out<low_out,则输出灰度将被反转。

    (2)低于low_in的作为low_in处理,高于high_in的作为high_in 处理。gamma>1 凸函数式映射,gamma<1凹函数式映射,默认为1。

    例子:

    >>f=imread('Fig0203(a).tif');

    >>g1=imadjust(f,[0 1],[1 0]);%负片,gamma默认是1

    >>g=imcomplement(f);%负片

    >>g2=imadjust(f,[0.5 0.75], [0 1]);

    >>g3=imadjust(f,[],[],2);[]默认是[0 1],gamma越大图像越暗

    >>Low_High=stretchlim(f); 输出f的高低两个灰度级

    >>g4=imadjust(f,stretchlim(f),[]);

    >>g5=imadjust(f,stretchlim(f),[1 0]);

    >>subplot(231),imshow(f),title('原图');

    >>subplot(232),imshow(g1),title('负片');

    >>subplot(233),imshow(g2),title('拉伸');

    >>subplot(234),imshow(g3),title('gamma=2');

    >>subplot(235),imshow(g4),title('stretchlim');

    >>subplot(236),imshow(g5),title('负片stretchlim');

    2. I = mat2gray(A, [amin amax])

    将图像矩阵A中介于amin和amax的数据归一化处理, 其余小于amin的元素都变为0, 大于amax的元素都变为1。

    I = mat2gray(A)

    将图像矩阵A归一化为图像矩阵I,归一化后矩阵中每个元素的值都在0到1范围内(包括0和1)。其中0表示黑色,1表示白色。

    3. 对数变换及对比度拉伸:

    g=c*log(1+double(f))

    其中,c---常数、f---输入图像矩阵,值为浮点类型

    g---输出图像矩阵

    log---自然对数,也可以是

    与gamma<1的gamma变换类似,输入输出图像的灰度低值为0,高值为1

    适用情形:

    一般用于减小动态范围。扩展低灰度值,压缩高灰度值。

    例子:

    >>f=imread('Fig0205(a).tif');f是uint8型图像

    >>subplot(121),imshow(f),title('频谱');

    >>g=im2uint8(mat2gray(log(1+double(f))));

    >>subplot(122),imshow(g),title('对数变换后频谱');


    4.指定任意灰度变换

    g=interp1(z,T,f);%内插函数

    f----输入图像 g----输出图像 均[0,1]取值

    Z、T----列向量,T: f---T(f), 即f在T变换下的像

    • T(1)~T(256)对应f中0~255的像素映射成的值。
    • z=linspace(0,1,numel(T))   在0 1之间产生numel(T)个均匀分布的坐标。
    • 像素是归一化的[0,1]之间。z,T是列向量。
    • 对于f中像素 先在z中找位置 再在T中按比例线性内插找映射结果。

    例子:

    f=imread('Fig0208(a).tif');

    f1=mat2gray(f);

    T=[0 0.6 0.3 0.7]';

    v=linspace(0,1,numel(T));

    g=interp1(v',T,f1);

    subplot(121),imshow(f),title('原图');

    subplot(122),imshow(g),title('任意灰度变换后 ');

    5.g=gscale(f,method, low,high)---自定义函数

    f---图像

    method---'full8', 'full16', 'minmax'

    f是将标定的图像。method的有效值是'full8'(默认)和'full16','full8'把输出标定为全范围[0,255],而'full16'把输出标定为全范围[0,65535].如果使用这两个值之一,参数low和high在这两种变换中被忽略。method的第三个参数有效值是'minmax',在这种情况下,必须提供其值在[0,1]范围内的参数low和high。选中'minmax'时,灰度级被映射到范围[low,high]内。尽管这些值指定在[0,1]范围内,但程序本身会根据输入的类别做出适当的标定,然后将输出转为与输入相同的类。例如,若f是uint8类,且将'minmax'限定在[0,0.5]范围内,则输出图像同样为uint8类,其值在[0,128]范围内。如f是浮点型图像,且其值在[0,1]范围以外,则程序在运行之前会将其转换到[0,1]范围内。

     

    6. 绘制直方图:

    h=imhist(f,b) b是灰度级分成几部分 默认是256

    p=imhist(f,b)/numel(f) 归一化直方图

    bar(horz,h,width) horz和h同维 horz是水平刻度增量(横坐标),h是垂直量(对应的纵坐标的值),width是柱状图宽度。在(0,1)之间。

    axis([0 255 0 60000]) x和y的坐标范围

    set(gca,'xtick',0:10000:60000) gca 意为获取当前轴,按间隔设置x轴。

    xlim('auto') 自动设置x轴取值范围和刻度标记。

    xlabel('textstring','font size',size) x轴文字标注、尺寸、颜色

    y轴原理相同。

    title('textstring') 加标题

    text(xloc,yloc,'textstring',fontsize,size) 在图中某位置加文字标注。

     

    7. 直方图均衡:

    (1)原理

    首先图像的灰度值归一到[0,1]以内,且共L个灰度值。对于输出图像的第K个灰度值,它的值等于输入图像前k个灰度值的概率之和,以此类推,得到输出图像的L个灰度值。 若输入图像灰度值连续函数与之原理类似。

     

    (2)函数

    g=histeq(f,nlev) f是输入的图像,nlev是输出图像设定的灰度级数。若nlev与L(输入图像可能的灰度级总数)相等,则直接执行变换函数。若nlev<L,则函数试图分配灰度级,以便得到近似平坦的灰度图。

     

    (3)适用情形:

    生成一幅灰度级等可能的图像,覆盖整个[0,1]范围。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。

    这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。

     

    (4)缺点

    如果像素集中在低灰度级,会导致输出图像集中在高灰度级,对比度仍然没有展开。而且有褪色的问题。

     

    (5)g=adapthisteq(f)  分部的直方图匹配。

     

    9. 线性滤波:

    g=imfilter(f,w,滤波模式,边界选项,大小选项) f是图像,w是模板

    滤波模式:

    相关:'corr'滤波模板直接通过

    卷积:'conv' 卷积是滤波器在通过前先旋转180度。

     

    边界选项:

    默认填充0

    'replicate'(复制边界值扩充)

    'symmetric'(对称扩充)

    'circular'周期填充

     

    大小选项: 'full' 扩充后的大小 'same' 原图像大小

    例子:

     

    10. 非线性滤波器

    不同于线性滤波器,非线性滤波器必须在confilt函数之前显式地填充输入图像。

    所使用地函数是:

    B =padarray(A,padsize,padval,direction)

    A为输入图像,B为填充后的图像,padsize给出了给出了填充的行数和列数,通常用[r c]来表示。padval和direction分别表示填充方法和方向。它们的具体值和描述如下:

    padval:'symmetric'表示图像大小通过围绕边界进行镜像反射来扩展;

    'replicate'表示图像大小通过复制外边界中的值来扩展;

    'circular'图像大小通过将图像看成是一个二维周期函数的一个周期来进行扩展。 direction:'pre'表示在每一维的第一个元素前填充;

    'post'表示在每一维的最后一个元素后填充;

    'both'表示在每一维的第一个元素前和最后一个元素后填充,此项为默认值。

    若参量中不包括direction,则默认值为'both'。若参量中不包含padval,则默认用零来填充。若参量中不包括任何参数,则默认填充为零且方向为'both'。在计算结束时,图像会被修剪成原始大小。

    例子:

     

    g=colfilt(f,[m,n],'sliding',fun)

    f—输入图像

    g—输出图像

    [m,n] —领域大小

    'sliding' —逐像素滑动

    fun—函数句柄

    例子:

     

    11.线性空间滤波器

    滤波模板w的生成: w=fspecial('type',parameters)

    不同类型的滤波器对应的参数不同。

    type='average',为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。

    type= 'gaussian',为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为 0.5。

    type= 'laplacian',为拉普拉斯算子,参数为alpha,用于控制拉普拉斯算子的形状,取值范围为[0,1],默认值为0.2。

    type= 'log',为拉普拉斯高斯算子,参数有两个,n表示模版尺寸,默认值为[3,3],sigma为滤波器的标准差,单位为像素,默认值为0.5

    type= 'prewitt',为prewitt算子,用于边缘增强,无参数。

    type= 'sobel',为著名的sobel算子,用于边缘提取,无参数。

    type= 'unsharp',为对比度增强滤波器,参数alpha用于控制滤波器的形状,范围为[0,1],默认值为0.2。

     

    12.非线性空间滤波器

    (1) 排序滤波器

    g=ordfilt2(f,order,domain) domain是一个逻辑数组,邻域中对应domain 0 元素的像素不参与排序,选取第order个数值作为f在该点的值。

     

    (2)中值滤波器

    g=medfilt2(f,[m,n],padnot) m*n的邻域 padnot是周边填充的模式。其中,'zeros'(默认值),'symmetric'镜像反射填充,'indexed'表示若f是double类,用1填充,否则用0填充。

     

    滤波适用情形:

    去除目标和背景中的噪声。

    g=imnoise(f,'salt & pepper',d) 在f上生成椒盐噪声。同理可生成其他噪声。

    版权声明:本文为CSDN博主「月半rai」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

     

    参考文章链接:https://blog.csdn.net/zlrai5895/article/details/79059918

  • 相关阅读:
    Opencv3 ——读取图像,显示图像
    QT5生成log日志
    QT5串口读取宇电温控器温度
    QSettings 配置信息写入本地文件
    Qt5应用程序封包
    python 创建虚拟环境
    Ubuntu更换国内源
    一个关于百度编辑器的小问题
    JavaScript等比例缩放图片(转载)
    asp.net io操作,修改文件夹的名称,报错:access to the path is denied
  • 原文地址:https://www.cnblogs.com/panqiaoyan/p/13062767.html
Copyright © 2020-2023  润新知