数学建模(3)——图像处理

来源:互联网 发布:python入门教程百度云 编辑:程序博客网 时间:2024/05/16 11:19

图像处理初步

基本作图函数

函数名 注释 plot 绘制连续波形 stem 绘制离散波形 axis 定义x,y坐标轴标度 subplot 分割图形窗口 hold 保留目前曲线 grid 画网格线 title 为图形加标题 xlable 为x轴加轴标 ylable 为y轴加轴标 text 在图上加文字说明 gtext 用鼠标在图上加文字说明

图像类型使之数组数值与像素颜色之间定义的关系,它和图像格式概念不同,在MATLAB图像处理工具箱中有五种类型的图像,在这里简单介绍二进制图像与灰度值图像

二进制图像

在一副二进制图像中,每一个像素将去两个离散数值(0或1)中的一个,从本质上说,这两个数值分别代表状态“开(on)”或“关(off)”.

灰度值图像

灰度图像通常由一个unit8、unit16或装精度类型的数组来描述,其实质是一个数据矩阵,该矩阵中的数据军代表了在一定范围内的灰度级,每一个元素对应于图像的一个像素点,通常0代表黑色,1、255或65 535(针对不同存储类型)代表白色。

图像类型间的转换

I = rgb2gray(RGB)

rgb2gray是一种函数,功能是将真彩色图像转换为灰度

BW = im2bw(I,level)BW = im2bw(RGB,level)

通过设定亮度阀值将灰度图像及RGB图像转换成二值图像
输出的二值图像在输入图像所有亮度小于给定值(level取值范围为【0,1】像素点处均为0,其他处为1),其中level的确定可以认为指定,也可以使用最大类值差方法自动确定level值
即:level = graythresh(I)

I=mat2gray(X,[xmin,xmax])

按指定的区至区间[xmin,xmax]将数据矩阵 X 转化为灰度图像 I ,xmin对应灰度值0(最暗即黑),xmax对应灰度1(最亮即白)。如果不指定区间,MATLAB则自动将 X 矩阵中最小值设为xmin,对大致设为xmax

图像运算

  • 图像放大
B = imresize( A,m,method )B = imresize( A,[mrows,mcols],method )B = imresize( A,m,method,n )B = imresize( A,m,method,h )

A为图像,m为放大缩小倍数,method为插值方法,可选值为‘nearest(最近邻插值)’‘bilinear(双线性插值)’’bicubic(双立方插值)’,上述方法2返回一个mrows行,mcols列的图像
在使用bilinear和bicubic方法缩小图片时,为消除引入的高频成分,imresize使用一个前端平滑滤波器,默认11*11,也可通过n指定
第四种方法是使用用户设计的插值核h进行插值,h可以看做一个二维FIR滤波器

  • 图像旋转
B=imrotate(A,angle,method,'crop')

通过指定crop参数对旋转后的图像进行剪切(取图像中间部分),把图像进行angle角度旋转,然后返回与A大小相同的中间部分

-图像裁剪

I2=imcrop(I)RGB2=imcrop(RGB1)

交互式对灰度图像和真彩图像进行裁剪,显示图像,允许用鼠标指定裁剪矩形

I2=imcrop(I,rect)RGB2=imcrop(RGB1,rect)

非交互式裁剪,rect为四元素向量【xmin,ymin,width,height】,分别表示矩阵的左上角坐标,宽度和长度

图像分析

figureimcontour(I) %显示图像的轮廓imhist(I,n)  %显示灰度图中的灰度分布,n为指定灰度级
  • 灰度图像的边缘:edge函数
BW = edge( I,method )BW = edge( I,method,thresh )BW = edge( I,method,thresh,direction )BW = edge( I,'log',thresh,sigma )

edgd函数返回和 I 大小一样的二进制推向BW,其中元素1为发现 I 的边缘,
Method参数列表为:
‘sobel’ 缺省值,用导数的sobel近似值检测边缘,那些梯度最大点返回边缘
‘prewitt’ 用导数的prewitt近似值检测边缘,那些梯度最大点返回边缘
‘roberts’ 用导数的roberts近似值检测边缘,那些梯度最大点返回边缘
‘log’ 使用高斯滤波器的拉普拉斯运算对 I 进行滤波,通过寻找0相交检测边缘
‘zerocross’ 使用指定的滤波器对 I 滤波后,寻找0相交检测边缘
用thresh指定灵敏度阈值,所有不强于该值的边缘都被忽略掉
对‘sobel’和 ‘prewitt’ 指定direction 方向:‘horizontal(水平)’‘vertical(垂直)’‘both(缺省值)’
用sigma指定标准偏差

  • 图像平滑
    1、向图像加噪声
J=imnoise(I,'gaussian',M,V)J=imnoise(I,'salt&pepper',D)J=imnoise(I,'speckle',V)

方法1:在图像中加入均值为M,方差为V的高斯白噪声,缺省值:0,0.01
方法2:在图像中加入强度为D的“树盐”黑白像素点,缺省值:0.05
方法3:使用公式J=I+n*I,向图像中加入乘法噪声,其中n是均值为0,方差值为V的均匀分布随机噪声,缺省值:0.04
2、二维中值滤波器

B=medfilt2( A,[M,N] )

对矩阵A进行二维中值滤波。每个输出像素包含输入图像中相应像素周期的M*N邻域的中值。在图像边缘添加0,因此边缘在【M,N】/2内的点可能发生扭曲,缺省值:【3,3】