此博客旨在记录自学过程,文中代码均为MATLAB。
1.亮度变换函数
1.1函数imadjust
g = imadjust(f,[low_in high_in],[low_out high_out],gamma)
函数作用为:将f中low_in到high_in 之间的值映射到 g中low_out 到 high_out之间,其中,输入图像应为uint8 uint16 double类。gamma为映射后的曲线类型。gamma<1 斜率递减曲线 gamma=1 直线 gamma>1 斜率递增曲线
函数输出的值均为0到1之间。若为uint8类,则255恢复原值;若为uint16,则65535恢复原值。
应用
(1)亮度翻转
g = imadjust(f,[0 1],[1,0])
(2)突出感兴趣带
g = imadjust(f,[0.5,0.75],[0,1])
将0.5到0.75区间映射到整个区间。
1.2 对数和对比度拉伸变换
g = c*log(1 + double(f))
应用
(1)压缩动态范围
g = im2uint8(mat2gray(log(1 + double(f)))))
傅里叶频谱范围为[0 10^6]或者更高。当其显示于已经线性缩放至8比特的监视器上时,高值部分占优,从而导致频谱中低亮度值的可视细节丢失。通过计算对数,10的六次方左右的动态范围会降至14左右,便于操作。
2. 直方图处理与函数绘图
2.1 生成并绘制图像的直方图
常用:imhist
h = imhist(f,b)
imshow(h)
#或者直接 imhist(f,b)
b为灰度级数,默认为256.(uint8有256 uint16有65536)
其他常用:
bar(horz,v,width) #绘制条形图
stem(horz,h1,'fill') #绘制散点图
plot()
2.2 直方图均衡化(增强对比度)
g = histeq(f)
imhist(g)
3.3 直方图规定化
g = histeq(f,hgram) #hgram为给定直方图
imhist(g)
3.空间滤波
3.1 线性空间滤波
矩阵卷积运算:https://blog.csdn.net/qq_32846595/article/details/79053277
此处参考 @寰宇的行者
g = imfilter(f,w,'filtering_mode','boundary_options','size_options')
f是输入图像,w是滤波掩模(模板矩阵),filtering_mode为滤波类型(相关:‘corr’ 卷积:‘conv’),boundary_options为边界选项(P,replicate,symmetric,circular 详见MATLAB工具箱),size_options(大小选项 full:与被扩展图像大小相同 same:与输入图像大小相同)
3.2 非线性空间滤波
处理方法同线性滤波(沿中心移位)
处理函数:nlfilter()与colfilt() 见matlab文件
4.常用滤波器函数
4.1 线性空间滤波器
用如下代码来生成滤波掩模w的函数fspecial()
w = fspecial('type',parameters)
type表示滤波器类型,parameters进一步定义了指定滤波器(详见MATLAB help)
4.2 非线性空间滤波器
最常用函数如下,该函数生成一个排序滤波器:
g = ordfilt2(f,order,domain)
最常用的排序滤波器为中值滤波器,生成函数如下:
g = ordfilt2(f,median(1:m*n),ones(m,n))
其中,median计算1:m*n的中值。
实际应用中,提供了一个二维中值滤波器:
g = medfilt2(f,{m,n},padopt)
[m,n]定义一个邻域,中值就在该邻域计算;padopt指定了三个可能的边界填充选项:
‘zeros’(默认值)
‘symmetric’(f按照镜像翻转的方式对称地沿其边界扩展。默认方式可能会产生黑色边界效应,即边界出现黑色斑点,用此选项可能能消除。)
‘indexed’(若f是double类,则用1填充,否则用0填充)