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)改进性能运行速度高于前者;
