函数imadjust是一个基本的图像处理工具箱函数,用于对灰度级图像进行灰度变换。一般语法格式:
g = imadjust(f, [low_in high_in], [low_out high_out] ,gamma)
例2.1:使用函数imadjust
原图:
负片同样可以用函数g = imcomplement(f)
得到
其他:
使用函数stretchlim:
有时,能够自动的使用函数imadjust而不必关心上面讨论的低参数或高参数是非常有用的,这时可以使用函数strethcilm
Low_High = strtchlim(f)
其中,Low_High是一个两元素向量,该向量由一个低限和一个高限组成,用于实现对比度拉伸。
可以看到这一操作增强了负片图像的对比度。
对数和对比度拉伸变换时动态范围操作的基本工具。对数变换通过如下表达式实现:
若使用取值范围为[0 1]的浮点数来表示输入图像和输出图像,则会大大简化程序。这意味着列向量T的所有元素必须是在相同范围内的浮点数。实现灰度映射的一种简单方法是使用函数interp1,有如下语法形式:
g = interp1(z, T, f)
其中f是输入图像,g是输出图像,T是刚才说的列向量,z是长度与T相同的列向量,其形成方式如下:
z = linspace(0, 1, numel(T))';
为检测输入到M函数的参量数目,可使用函数nargin,
n = nargin
它返回输入到M函数的参量的实际数量。类似的,函数nargout用于M函数的输出,语法为:
n - nargout
例如,假设执行如下假定的M函数:
>> T = testhv(4,5);
在函数体重使用函数nargin将返回2,使用nargout将返回1。
函数nargchk:
一副数字图像在[0,G]范围内总共有L个灰度级,其直方图定义为下列离散函数:
在处理图像直方图的工具箱中,核心函数是imhist,其基本语法如下:
h = imhist(f, b)
其中,f为输入图像,h为其直方图,b是用来形成直方图的“容器”的数目(默认256)
例2.4 计算并绘制直方图。
在屏幕上绘制直方图最简单的方法就是使用没有规定输出的函数imhist:
>> imhist(f);
stem函数:
直方图均衡由工具箱中的函数histeq实现,其语法为
g = histeq(f,nlev);
其中f为输入图像,nlev是为输出图像设定的灰度级数。默认nlev = 64。
f = imread('ColdWinter.jpg');
>> imshow(f); % figure1
>> figure, imhist(f); % figure2
>> ylim('auto')
>> g = histeq(f,256);
>> figure, imshow(g); % figure3
>> figure, imhist(g); % figure4
工具箱使用函数imfilter来实现线性空间滤波,该函数的语法如下:
g = imfilter(f, w, filtering_mode, Bountdry_options, size_options)
其中,f为输入图像,w为滤波模板,g为滤波后的结果,其他参数在表中
,最常见的语法是:
g = imfilter(f, w, 'replicate')
其中,m和n表示滤波区域的维数。’sliding’表明处理过程是m×n区域在输入图像f中逐个像素地华东,fun是一个函数句柄,parameters是函数可能用到的参数,以逗号隔开。
fp = padarray(f, [3 2], 'replicate', 'post');
将产生结果:
工具箱支持许多预定义的二维线性空间滤波器。这些滤波器可以通过函数fspecial得到,该函数生成一个滤波模板w,语法为:
w = fspecial('type', parameters)
其中,’type’指定滤波器的类型,parameters进一步定会以规定的滤波器。
使用函数imfilter实现拉普拉斯滤波器
w = [0 1 0;1 -4 1; 0 1 0];
>> g1 = imfilter(f, w, 'replicate');
>> imshow(g1, [ ]);
>> imshow(f);
>> figure, imshow(g1, []);
>> f2 = im2double(f);
>> g2 = imfilter(f2,w,'replicate');
>> figure, imshow(g2,[]);
>> g = f2-g2;
>> figure, imshow(g);
二维中值滤波器的专用实现:
g = medfilt2(f, [m n], padopt);
其中,数组[m n]定义一个大小为m×n的邻域,padopt指定三个可能的边界填充选项之一:’zeros’(默认),’symmetric’指出f按照镜像反射方式对称地沿边界扩展,’indexed’表示若f是double类的则用1填充,否则用0填充。默认形式:
g = medfilt2(f);
利用函数medfilt2进行中值滤波
>> f = imread('ColdWinter.jpg');
>> fs = rgb2gray(f);
>> imshow(fs);
>> fn = imnoise(fs, 'salt & pepper', 0.2);
>> imshow(fn);
>> gm = medfilt2(fn);
>> gms = medfilt2(fn, 'symmetric');
>> figure,imshow(f);
>> figure,imshow(fs);
>> figure,imshow(fn);
>> figure,imshow(gm);
>> figure,imshow(gms);