数字图像处理复习

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); %幂次变化

image-20191228162735178

imcomplement(img);

实现图像反相效果

img = imcomplement(img);

im2uint8uint8函数的区别

数据类型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);
image-20191228165035818

直方图均衡化

  1. histeq直方图均衡化函数

    • g = histeq( f , nlev )
      • 其中f为原图像, nlev是为输出图像指定的灰度级数;默认64级
  2. 归一化直方图获取

    • p = imhist(f,b)/ numel(f)
  3. imhist绘制

    • imhist(f, b); %默认方式绘制直方图 b默认值为256
    • 若b=2则原图像的亮度被分成两个级别统计
  4. 例子:

    1
    2
    g = histeq(f,200);
    imhist(g);% 和imshow一样,会直接显示

线性空间滤波

  • 线性过滤器是线性系统和频域过滤概念在空域 的自然延伸。
  • 模板尺寸对过滤器效果的影响 – 模板尺寸越大,图像越模糊,图像细节丢失越多

空间域线性滤波函数

  1. 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
  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’
  3. 例子

    1
    2
    w = 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}

非线性空间滤波函数

  1. medfilt2( 二维中值滤波器)

    • g = medfilt2(f,[m n],padopt)
      • 其中[m n]指明领域范围
      • padopt指明边界填充方式:
        • ’ zero ’–0值填充(默认填充方 式)’symmetric’—镜像反射方式填充
        • ‘indexed’–若图像是double类型,则用1填充, 否则用0填充
    • 中值滤波对椒盐噪声的滤除效果非常好
    1
    f = medfilt2(f); % 中值滤波
  2. 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. 拉普拉斯算子

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    f=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);
  2. sobel算子

    1
    2
    3
    4
    5
    6
    7
    8
    9
    f=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);

  1. g = imnoise(f, type, parameters)

    • f 为输入图像,函数imnoise在给图像f添加噪声之前先 将它转换为范围[0, 1]的double图像;
    • type为噪声的类型,有 ‘gaussian’, ‘localvar’, ‘salt & pepper’, ‘speckle’, ‘poisson’等等。
    • parameters为参数,根据不同类型的噪声而不同。
  2. 各种形式

    1. g = imnoise(f, ‘gaussian’, m, var)
      • 将均值为m,方差为var的高斯噪声添加到图像f中
      • 默认值:均值m为0, 方差var为0.01
    2. g = imnoise(f, ‘localvar’,v)
      • 将均值为0、局部方差为V的高斯噪声添加到图像f中
      • V为与f大小相同的一个数组,它包含每个点的理想方差
    3. g = imnoise(f, ‘localvar’, image_intensity, var)
      • 将均值为0的高斯噪声添加到图像f中
      • 局部方差var是图像f的亮度值函数
      • image_intensity
    4. g = imnoise(f, ‘salt & pepper’,d)
      • 椒盐噪声添加到图像f中
      • d为噪声密度,即包含噪声值的图像区域的百分比,因 此大约有d*numel(f)个像素受到影响。
      • d的默认值为0.05
    5. g = imnoise(f, ‘speckle’, var)
      • 用方程g = f + nf将乘性噪声添加到图像中f
      • n是均值为0,方差为var的均匀分布的随机噪声
      • Var的默认值为0.04
    6. g = imnoise(f, ‘poisson’)
      • 从数据中生成泊松噪声,而不是将人工的噪声添加到数据中
  3. 高斯噪声直方图分布特点

    高斯噪声特点是它主要由阻性元器件内部产生,它的概率密度函数 服从高斯分布(即正态分布)

  4. 椒盐噪声直方图分布特点

    在密度标度的白端有一个额外的尖峰,因为噪声成分为纯黑或纯白

imread (提取分量图像)

从彩色图像中提取三幅分量图像

1
2
3
4
file = imread(‘*.tif’) % 使用imread函数读文件
fr = file(:, :, 1); % 提取红色通道
fg = file(:, :, 2); % 绿色通道
fb = file(:, :, 3); % 蓝色通道

cat (将分量图像合成彩色图像)

  1. C = cat(dim,A1,A2,A3,A4,…)

    • dim为1时,将矩阵上下拼接 :[A; B] (注意 分号!分号!分号!)
    • dim为2时,将矩阵左右拼接:[A, B]
    • dim=3时则可以构造三维数组
  2. 1
    file = cat(3,fr,fg,fb); % 将rgb三个分量合成一个彩色图像

    image-20191228221648733

size( 获取数组的行数和列数 )

size中的A为数组A

注:在使用该函数前,先用double进行处理。例: f = double(f);

  1. s=size(A)

    • 一个输出参数
    • 返回一个行向量(s),该行向量的第一个元素是数组A的行数,第 二个元素是数组A的列数
  2. [r,c]=size(A)

    • 有两个输出参数时
    • 将数组的行数返回到第一个输出变量, 将数组的列 数返回到第二个输出变量( r行数,c列数)
  3. r=size(A,1)

    • r 为数组A的行数
  4. c=size(A,2)

    • c 为数组B的列数

rgb2hsi rgb彩色图像转为HSI空间图像

hsi2rgb 调用函数将HSI图像转化为RGB图像

0%