imadjust(反相,幂次变化,变化)
imadjust ( img, [0 1], [ 1 0]); % 实现图像反相效果
g = imadjust(f,[low_in high_in], [low_out high_out],gamma) ;
imajust(f,[0 0.5],[0.5 1]); % 图像变亮
g2=imadjust(f,[0.5 0.75],[0 1]); % 将部分灰度区域扩展
- gamma: 幂次基本变化
g = imadjust(f, [], [] , 0.3); %幂次变化
imcomplement(img);
实现图像反相效果
img = imcomplement(img);
im2uint8和uint8函数的区别
数据类型uint8,以此方式存储的图像称为8位图像,可以节省存储空间。matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算,若要imshow显示图像结果,就需要再im2uint8,把数据类型转换成uint8类型,如果超过0~1范围,就要用uint8()或者mat2gray()把矩阵转化为灰度图像格式double
对比度拉伸
在处理图片前需要对图片进行mat2gray函数处理
- 例 g = 1. / ( 1 + (0.15./(double(‘image’) + eps)).^E);
直方图均衡化
histeq直方图均衡化函数
- g = histeq( f , nlev )
- 其中f为原图像, nlev是为输出图像指定的灰度级数;默认64级
- g = histeq( f , nlev )
归一化直方图获取
- p = imhist(f,b)/ numel(f)
imhist绘制
- imhist(f, b); %默认方式绘制直方图 b默认值为256
- 若b=2则原图像的亮度被分成两个级别统计
例子:
1
2g = histeq(f,200);
imhist(g);% 和imshow一样,会直接显示
线性空间滤波
- 线性过滤器是线性系统和频域过滤概念在空域 的自然延伸。
- 模板尺寸对过滤器效果的影响 – 模板尺寸越大,图像越模糊,图像细节丢失越多
空间域线性滤波函数
fspecial(创建滤波器)
- w = fspecial(‘type’,parameters) % 创建滤波器
- 其中type为滤波器类型;parameters参数(可多个,根据类型决定)
- type:
- ‘average’:均值滤波,默认值为[3,3]
- ‘disk’: 圆形区域均值滤波,参数代表区域半径,默认值为5.
- ‘gaussian’:高斯低通滤波** fspecial(‘gaussian’,hsize,sigma)
- hsize表示模板尺寸,默认值为[3 3],sigma为滤波器的标准值,单位为像素,默认值为0.5
- ‘ laplacian’: 拉普拉斯算子, FSPECIAL(‘laplacian’,ALPHA)
- 参数alpha用于控制算子形状,取值范围为[0,1],默认值为0.2
- ‘log’: 拉普拉斯高斯算子, FSPECIAL(‘log’,HSIZE,SIGMA)
- hsize表示模板尺寸,默认值为[3 3],sigma为滤波器的标准差,单位为像素,默认值为0.5
- ‘motion’:运动模糊算子, FSPECIAL(‘motion’,LEN,THETA)
- 表示摄像物体逆时针方向以theta角度运动了len个像素,len的默认值为9,theta的默认值为0;
- ‘prewitt’:边缘增强,大小为[3 3],无参数 FSPECIAL(‘prewitt’)
- ‘sobel’:边缘提取,无参数 FSPECIAL(‘sobel’)
- ‘unsharp’:对比度增强滤波器,FSPECIAL(‘unsharp’,ALPHA)
- 参数alpha用于控制滤波器的形状,范围为[0,1],默认值为0.2
imfilter(空间域线性滤波函数 )
- g = imfilter(f,w,filtering_mode,boundary_opotion,size_option) % 空间域线性滤波函数
- 其中f为输入图像, w为掩模(滤波器),g为滤波结果图像
- filtering_mode指明 使用相关(‘corr ’) 还是卷积(‘conv ’)
- boundary_opotion 指明图像边界如何填充(‘replicate’,’symmetric’, ‘circular’)
- size_option指明计 算采用’ same ’还是 ‘full’
例子
1
2w = fspecial('average',31); % 掩模采用31x31的盒滤波器
g = imfilter(f, w, 'conv', 'replicate', 'full');
非线性空间滤波
- 定义: 使用模板进行结果像素值的计算,结果值直接取决于 像素邻域的值,而不使用乘积和的计算
- 中值滤波
- 主要用途:钝化图像、去除噪音
- 计算公式:R = mid {zk | k = 1,2,…,9}
- 最大值滤波
- 主要用途:寻找最亮点
- 计算公式:R = max {zk | k = 1,2,…,9}
- 最小值滤波
- 主要用途:寻找最暗点
- 计算公式:R = min {zk | k = 1,2,…,9}
非线性空间滤波函数
medfilt2( 二维中值滤波器)
- g = medfilt2(f,[m n],padopt)
- 其中[m n]指明领域范围
- padopt指明边界填充方式:
- ’ zero ’–0值填充(默认填充方 式)’symmetric’—镜像反射方式填充
- ‘indexed’–若图像是double类型,则用1填充, 否则用0填充
- 中值滤波对椒盐噪声的滤除效果非常好
1
f = medfilt2(f); % 中值滤波
- g = medfilt2(f,[m n],padopt)
ordfilt2(排序滤波器)
- 可以生成统计排序滤波器 (也称为排序滤波器)
- 原理:对图像领域中所包含的像素进行排序,然后 使用排序结果确定的值代替领域中的中心像素的值。
- 用法: g= ordfilt2(f,order,domain)
- 其中f为输入图像;order指明领域内像素排序后用以代替领域中心像素的元素序号; domain指明领域范围,由0、 1组成。
- 例:g= ordfilt2(f,1,ones(m,n))%最小滤波器
- 例:g= ordfilt2(f,m*n,ones(m,n))%最大滤波器
- 例:g= ordfilt2(f,median(1:m*n),ones(m,n))%中值滤波器
1
g = ordfilt2(f,13,ones(5,5));
线性滤波器与非线性滤波器区别
线性滤波器的原始数据与滤波结果是一种算术运算,即用加减乘除等运算实现。由于线性滤波器是算术运算,有固定的模板,因此滤波器的转移函数是可以确定并且是唯一的。
非线性滤波器的原始数据与滤波结果是一种逻辑关系,即用逻辑运算实现,是通过比较一定邻域内的灰度值大小来实现的,没有固定的模板。
增强图像
拉普拉斯算子
1
2
3
4
5
6
7
8
9
10
11f=imread(‘moon.tif’);
w4=fspecial(‘laplacian’,0); % 使用fspecial函数创建拉普拉斯滤波器
w8=[1 1 1;1 -8 1;1 1 1]; % 手工创建拉普拉斯滤波器
f=im2double(f);
g4=f-imfilter(f,w4,’replicate’); % 使用拉普拉多算子和imfilter函数对图像进行增强操作
g8=f-imfilter(f,w8,’replicate’);
imshow(f);
figure,imshow(g4);
figure,imshow(g8);sobel算子
1
2
3
4
5
6
7
8
9f=imread(‘moon.tif’);
w4=fspecial(‘sobel’,0); % 使用sobel函数创建拉普拉斯滤波器
f=im2double(f);
g4=f-imfilter(f,w4,’replicate’); % 使用sobel算子和imfilter函数对图像进行增强操作
imshow(f);
figure,imshow(g4);
figure,imshow(g8);
imnoise(生成噪声)
注意 函数imnoise在给图像f添加噪声之前先 将它转换为范围[0, 1]的double图像;
f = im2double(f);
g = imnoise(f, type, parameters)
- f 为输入图像,函数imnoise在给图像f添加噪声之前先 将它转换为范围[0, 1]的double图像;
- type为噪声的类型,有 ‘gaussian’, ‘localvar’, ‘salt & pepper’, ‘speckle’, ‘poisson’等等。
- parameters为参数,根据不同类型的噪声而不同。
各种形式
- g = imnoise(f, ‘gaussian’, m, var)
- 将均值为m,方差为var的高斯噪声添加到图像f中
- 默认值:均值m为0, 方差var为0.01
- g = imnoise(f, ‘localvar’,v)
- 将均值为0、局部方差为V的高斯噪声添加到图像f中
- V为与f大小相同的一个数组,它包含每个点的理想方差
- g = imnoise(f, ‘localvar’, image_intensity, var)
- 将均值为0的高斯噪声添加到图像f中
- 局部方差var是图像f的亮度值函数
- image_intensity
- g = imnoise(f, ‘salt & pepper’,d)
- 将椒盐噪声添加到图像f中
- d为噪声密度,即包含噪声值的图像区域的百分比,因 此大约有d*numel(f)个像素受到影响。
- d的默认值为0.05
- g = imnoise(f, ‘speckle’, var)
- 用方程g = f + nf将乘性噪声添加到图像中f
- n是均值为0,方差为var的均匀分布的随机噪声
- Var的默认值为0.04
- g = imnoise(f, ‘poisson’)
- 从数据中生成泊松噪声,而不是将人工的噪声添加到数据中
- g = imnoise(f, ‘gaussian’, m, var)
高斯噪声直方图分布特点
高斯噪声特点是它主要由阻性元器件内部产生,它的概率密度函数 服从高斯分布(即正态分布)
椒盐噪声直方图分布特点
在密度标度的白端有一个额外的尖峰,因为噪声成分为纯黑或纯白
imread (提取分量图像)
从彩色图像中提取三幅分量图像
1 | file = imread(‘*.tif’) % 使用imread函数读文件 |
cat (将分量图像合成彩色图像)
C = cat(dim,A1,A2,A3,A4,…)
- dim为1时,将矩阵上下拼接 :[A; B] (注意 分号!分号!分号!)
- dim为2时,将矩阵左右拼接:[A, B]
- dim=3时则可以构造三维数组
例
1
file = cat(3,fr,fg,fb); % 将rgb三个分量合成一个彩色图像
size( 获取数组的行数和列数 )
size中的A为数组A
注:在使用该函数前,先用double进行处理。例: f = double(f);
s=size(A)
- 一个输出参数
- 返回一个行向量(s),该行向量的第一个元素是数组A的行数,第 二个元素是数组A的列数
[r,c]=size(A)
- 有两个输出参数时
- 将数组的行数返回到第一个输出变量, 将数组的列 数返回到第二个输出变量( r行数,c列数)
r=size(A,1)
- r 为数组A的行数
c=size(A,2)
- c 为数组B的列数