数字图像处理—亮度变换与空间滤波—亮度变换函数

数字图像处理—亮度变换与空间滤波—亮度变换函数

参考资料:《数字图像处理》,仅供学习参考。
亮度变换函数仅取决于亮度的值,与像素位置无关,所以亮度变换函数通常可写成如下形式:
s = T ( r ) s=T(r)
其中,r表示图像f中相应点(x,y)的亮度,s表示图像g中相应点(x,y)的亮度。

函数imadjust

语法

其语法为 g = imadjust(f, [low_ in high_ in], [low_out high_ out], gamma)

作用

此函数将图像f中的亮度值映像到g中的新值,即将low_ in至high_ in之间的值映射到low_ out至high_ out 之间的值。low_ in以下与high_ in以上的值则被剪切掉了。
输出图像与输人图像有着相同的类。除图像f外,函数imadjust的所有输人输均指定在0和1之间。 若f是uint8类图像,则函数imadjust将乘以255来确定。[low_ in high_ in]或[low_ out high_ out]使用空矩阵([])会得到默认值[0 1]。
参数gamma指定了曲线的形状,该曲线用来映射f的亮度值,gamma默认为1。
在这里插入图片描述

示例

下面展示imadjust的处理效果,a为原图,b为使用如下命令g1=imadjust(f,[0 1],[1 0]) 得到的亮暗翻转图像,亮暗翻转图像也可以通过函数imcomplement实现,g=imcomplement(f)。图c是使用命令g2=imadjust(f,[0.5 0.75],[0 1]) 得到的结果。该命令将0.5至0.75之间的灰度级扩展到范围[0, 1],可以突出感兴趣的亮度带。以图像为uint8为例,将像素范围为[2550.5 2550.75]拓展到范围为[0 255]。图d是使用命令g3=imadjust(f,[],[],2),此处gamma=2,可参考上面图像,可得此时是压缩灰度级的低端,扩展灰度级的高端。

图例

对数和对比度拉伸变换

语法

g = c l o g ( 1 + d o u b l e ( f ) ) g=c*log(1+double(f))

作用

压缩动态范围,避免可视细节丢失。函数形状与上面所述gamma曲线类似,但gamma曲线形状可变,而对数函数形状固定。

语法

g = i m 2 u i n t 8 ( m a t 2 g r a y ( g ) ) ; g=im2uint8(mat2gray(g));

作用

将压缩值还原为显示的全范围。上句是对8bit而言,使用mat2gray可使范围在0-1之间,然后使用im2uint8将范围限定在[0 255]。

语法

对比度拉伸变换函数形式:
s = T ( r ) = 1 1 + ( m / r ) E s=T(r)=\frac{1}{1+(m/r)^{E}}
MATLAB语法:g=1./(1+(m./(double(f)+eps)).^E)
使用eps可避免f出现0值的溢出现象

示例

对比度拉伸

亮度变换的一些实用M函数

语法

n=nargin
n=nargout
result=nargchk(low,high,number)

作用

检测函数输入/输出参量数目,nargin返回函数的输入参量数目,nargout返回函数的输出参量数目。如执行如下函数:T=testhv(4,5);则在函数中使用nargin返回2,使用nargout返回1。

nargchk可用于M函数中检测输入参量的个数是否正确。在number小于low或大于high时均会报错,若介于两者之间则返回一个空矩阵。

示例

function G=test(x,y,z)
……
error(nargchk(2,3,nargin));
……

语法

function [m,n]=test(varargin)
function [varargout]=test(m,n,p)

作用

函数具有可变数目的输入参量和输出参量。MATLAB会将其置入一个单元数组中,调用方式如下:varargin{1}、varargin{2}。其中可以包括不同数据类型的参数。

原创文章 4 获赞 8 访问量 156

猜你喜欢

转载自blog.csdn.net/qq_42334072/article/details/105878458