数字图像处理的MATLAB实现[2]

    xiaoxiao2021-12-14  20

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

    输入图像的类型:uint8、uint16、double;

    无论f为何种类型都将输入设定为[0,1]之间,后根据类型进行具体的转换,输出图像与输入图像的类型一致;

    对于f中小于low_in的及大于high_in的直接映射为low_out和high_out;

    若输入的low_out大于high_out,输出灰度反转,其中low_in必须小于low_out,实现灰度反转不能通过 imshow(f,[1 0])实现,imshow中low需小于high,可以通过imcomplement实现负片;

    如果gamma值小于1, 映射加权至较亮的输出值;gamma等于1(默认),线性映射;gamma大于1,映射加权至较暗的输出;

    可以使用g=imadjust(f,stretchlim(f),[])获得较好的对比度;

    2.指定任意灰度变换(源代码P32-34)

    g=intrans(f,method,varargin) method包括neg、log、gamma、stretch、specified;

    'neg' g=imcomplement(f) 实现负片等效于imadjust(f,[],[1 0]);

    'log' g=logTransform(f,varargin)  

    'gamma' g=imadjust(f,[],[],gamma);

    'stretch' g=stretchTransform(f,varargin{:}) 

    'specified' g=spcifiedTransform(f,txfun)

    下面对interp1进行说明,g=interp1(z,T,f),T是表示输出的一组列向量值,z是与T含有相同元素个数的列向量,z=linspace(0,1,numel(T)),对于输入的f找到对应的z,映射到相应的T,实现灰度变换;

    3.用于标定灰度的M-函数

    利用g=gscale(f,method,low,high)可以将图像标度在全尺度,即最大范围

    method:full8(默认),输出标定在[0,255];full16,输出标定在[0,65535];minmax 需要提供[low,high] 其中范围为[0,1] 系统会根据数据类型自动对应到相应的输出

    4.关于灰度直方图

    imhist(f,b) b为统计堆栈数,即将256分为b份,每一份对应全部覆盖像素集合,经归一化处理后,得到概率直方图,默认值256;

    bar(horz,z,width) horz 是与z同维数的行向量,horz提供水平方向增量,z提供竖直方向增量,width介于(0,1)之间,默认值0.8,当width=1时,间距较大;

     axis([x_min x_max y_min y_max]) 规定坐标轴的范围

     set(gca,'xtick',0:50:255) 规定横轴的坐标分度

     set(gca,'ytick',0:20000:60000) 规定纵轴的分度

     xlim('auto') 和ylim('auto')可以自动设定取值范围及刻度

     xlabel('text string','frontsize',size) 添加横轴注释

     ylabel('text string','frontsize',size) 添加纵轴注释

     text(xloc,yloc,'text string','frontsize',size) 在(x,y)处插入文本信息

     stem(horz,z,'LineSpec','fill')  绘制杆状图

     fplot(fhandle,limits,'LineSpec') 绘制曲线  fplot用于处理函数句柄及.m函数

    5.直方图均衡化

    g=histeq(f,nlev) nlev为输出图像设定的灰度级数,默认值为64,通常取256,以尽可能应用灰度进行均衡化

    g=adapthisteq(f,param1,val1,param2,val2...) 仅处理图片的一小部分,提高局部对比度,增强局部细节

    'NumTiles',[r,c] 指定小片的范围,默认值[8 8];

    'ClipLimit', 范围[0 1]的对比度,默认值0.01;

    6.g=imfilter(f,w,filtering_mode,boundary_options,size_options)

    w 滤波模板大小;

    filtering_mode 滤波形式: 'corr ' 相关 (默认) ;  'conv' 卷积;

    (可以使用rot90(w,2)将w旋转180°,将corr转换为conv)

    boundary_options 边界选项 :'replicate' 复制边界 ;'symmetric' 自身边界镜像映射 ;'circular'作为二维周期进行扩展 ;默认选项0;

    size_options 大小选项:'full' 输出填充后的图像;'same'输出与输入相同大小的图像;

    7.非线性滤波

    nlfilter:直接对二维数组进行处理;colfilt:将其邻域转化为列向量进行处理,速度快;

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

    [m,n]表示滤波模板维数;

    ‘sliding’表示处理区域子啊输入图像f中逐像素移动;

    fun 非线性处理过程;

    对输入图像进行填充:

    fp=padarray(f,[r c],method,direction)

    [r,c]表示用于填充f的行列数;

    method同imfilter;

    direction:'pre'每一维第一个元素之前;'post'每一维最后一个元素之后;'both'第一个元素之前和最后一个元素之后(默认);

    8.空间滤波

    拉普拉斯滤波器:w=fspecial('laplacian',0) %w=[0 1 0;1 -4 1;0 1 0];

                                 w=[1 1 1;1 -8 1;1 1 1];(此模板对于边界有更强的增强效果,所得图像更加清晰)

    由于经拉普拉斯滤波器滤波后,中心元素为负值,需要保留负值,需要将数据类型有uint8转换为float;将原始图像与经过滤波后的图像相减将后得到较为理想的图像(回到原始的灰度标定);

    非线性空间滤波:

    g=ordfilt2(f,order,domain)

    order:使用邻域内第order个元素代替该值;

    domain:规定邻域范围,由0和1组成的m*n大小矩阵;

    对于中值滤波:g=ordfilt2(f,(m*n+1)/2,ones(m,n))

    g=medfilt2(f,[m n],padopt)

    [m n]:滤波模板大小;

    padopt:边缘填充选项;'zeros',(默认值);'symmetric',按镜像反射方式对称沿边缘扩展;'indexed',如果f属于double型,用1填充,其他类型用0填充;

    9.模糊技术

    主要步骤:

    (1)模糊输入:使用在每个规则中可用的隶属度函数,通过把输入映射到[0,1]区间中,找到与每个标量对应的模糊值;

    (2)执行模糊逻辑操作:将先决条件所有部分的输出组合在一起,通过操作得到单一值;

    (3)利用一种推断方法:使用每个规则的先决条件的单个输出来提供与规则对应的输出;

    (4)聚合:将由(3)的得到的不同单值输出聚合到一起,此过程使用OR运算;

    (5)去模糊:针对输入得到最终的标量输出;

    10.有关模糊的函数

    (1)隶属度函数:

    triangmf(z,a,b,c) 三角形;

    trapezmf(z,a,b,c,d) 梯形;

    sigmamf(z,a,b) sigma型;

    smf(z,a,b) S型;

    bellmf(z,a,b) 钟型;

    truncgaussmf(z,a,b,s) 截断的高斯形状;

    (2)计算规则强度函数:

     L=lambdafcns(inmf,op) 

    inmf M*N矩阵,对应于第M个规则的第N个输入 对于inmf输入rules{;;}表示M条规则;

    op 表示关系 默认min

    (3) 执行推断函数:

    Q=implfcns(L,outmf,varargin)

    outmf 表示输出模糊函数,一般用行向量表示;

    varargin 对应于输入

    (4) 执行聚合函数: Qa=aggfcn(Q);

    (5)执行去模糊的函数

    out=defuzzify(Qa,vrange)  

    vrange Qa的输入范围,一般选择[0,1]

    (6)将上述五个过程结合在一起:

    F=fuzzysysfcn(inmf,outmf,vrange,op)

    G=approxfcn(F,range)改进性能运行速度高于前者;

    转载请注明原文地址: https://ju.6miu.com/read-970440.html

    最新回复(0)