数字图像处理 第一周学习笔记

第一周学习笔记

第一章

  • 什么是数字图像处理?

    一幅图像可以定义为一个二维函数$f(x,y)$,$f$在任意处的幅度为该点处图像的亮度或灰度,当x,y,$f$都为有限的离散值时,该图像为数字图像。数字图像处理就是用计算机处理数字图像

    本书中所谓的数字图像处理包含输入输出都是图像的过程,从图像中提取特征的过程,以及对单个对象进行识别的过程,包含了图像处理的低中高三级处理。

  • MATLAB

    MATLAB集成了计算、可视化和编程,它是一种交互式系统,其基本数据元素是并不要求确定维度的的一个数组,能让我们用公式方便的解决涉及矩阵的问题,所以十分适用于图像处理
    MATLAB中扩展名为.m是脚本文件或函数文件,扩展名为.mat是保存的变量

第二章 基本原理

2.1~2.4 数字图像的表示及操作

数字图像的表示

一副图像就是一个二维函数$f(x,y)$,其中x、y是空间(平面)坐标,$f$在任意点处的振幅就是该点处的亮度或者灰度(灰度是用来表示黑白图像的亮度的)。

彩色图像是由单个二维图像组成的,例如RGB图像就是三个分量图像组合而成(红、绿、蓝)。因此,许多应用在黑白图像上的处理技术,也可以应用到彩色图像上。

坐标数字化称为取样,振幅的数字化称为量化。当$f$的x,y分量和振幅都是有限且离散的量时,称该图像为数字图像。

坐标约定

取样量化的结果是一个实数矩阵。坐标表示的意思是在当前行取值的像素点。如(0,0)(书籍中图像原点的定义(x,y) = (0,0),工具箱中原点定义为(r,c) = (1,1))就是在第一行的第一个取样,而不是取样的实际物理地址。

图例

IPT还使用一种极少使用的空间坐标约定,与我们平时使用的x,y正好相反。

图像矩阵表示

数字化图像函数表示:

数字化

MATLAB中表示:

MATLAB

其中$f(0,0)$ = f(1,1),这里斜体是数字化图像,等宽字体代表MATLAB中的表示。

数字图像的读取

imread函数
  • imread('filename')
  • imread和imwrite支持的一些常用图像类型
    支持
  • size(f) 获得一副图像的行数和列数
  • whos f 获得图像的一些附加信息

数字图像的显示

  • imshow(f, G) 基本语法

    f是一个图像数组,G是该图像的灰度级数(缺省值为256)

  • imshow(f, [low high])

    显示图像小于low的像素点显示为黑色,大于high的像素点显示为白色。介于两者之间的以默认的级数显示为中等亮度值。

  • imshow(f, [])

    low设置为数组f的最小值,high设置为数组f的最大值。此用法在显示一副动态范围小或既有负值又有正值的图像十分有用

    医学例子

  • pixval

    交互显示单个像素的亮度值

数字图像的存储

我们在后续章节处理的大多是JPEG和TIFF格式的图像

  • imwrite(f, 'filename')

  • imwrite(f, 'filename', 'quality', q) 常用但只适用于JPEG图像

    q是一个在0~100之间的整数,q越小,图像退化越严重

    补充知识:

    1. bitdepth,位深度,一个像素存储的位数
    2. 伪边缘,图像中出现的类似等高线的轮廓线
  • imwrite(f, 'filename', 'compression', 'parameter', ..., 'resolution', [colres rowres]) 只适用于tif图像

    1. parameter主要为以下值

      1. none 无压缩
      2. packbits 非二值图像的默认参数
      3. ccitt 二值图像默认参数
    2. [colres rowres]

       表示以每单位中的点数给出图像的列分辨率和行分辨率(缺省值为[72 72]),使用res和[res res]来表示指定分辨率是等价的
      
  • 使用print命令将图像输出到磁盘

    print -fno -dfileformat -rresno filename

    1. no是图形窗口的图形编号
    2. fileformat是输出文件格式
    3. resno指定分辨率(单位dpi)
    4. filename指定输出文件名
    5. 例子:print -f1 -dtiff -r75 test

问题:为什么是tif图像而不是其他?

答案:tif图像的可拓展性强(查阅资料我个人觉得是这点,不知道老师对这个的解答是什么),除了图像之外还可以写入额外的信息。而且jpg等图像还能直接嵌入tif图像中。tif图像拓展名一般为.tif或.tiff。tif图像三个重要组成:IFH(Image File Header)、IFD(Image File Directory)、DE(Directory Entry)

2.6~2.10 MATLAB数据类型以及M函数

数据类

数据类

图像类型

图像类型

亮度图像

一副亮度图像就是一个数据矩阵,其归一化的取值代表亮度。

uint8类或uint16类,整数值范围分别是[0,255][0,65535]。

若像素是double类,则像素的取值就是浮点数。规定双精度归一化亮度图像的取值范围为[0,1]。

二值图像

一副二值图像是一个取值只有0和1的逻辑数组。

所以取值只有0和1的uint8类数组再MATLAB中不是二值图像,但可以使用logical函数将数组转化为逻辑数组。也可以使用islogical判断是否为逻辑数组

一幅图像的特征是由数据类和图像类型这两张来表征的
数据类型转换

通用语法是:B = data_class_name(A)

图像类型转换

数据类型转换

索引
  • 转置运算符(.')将行向量变成列向量

  • v(:)将产生一个列向量

  • v(a,x,b)索引,中间为步长,从a取到b

  • A([1 3],:)挑选第1和3的两行

  • B(:,3)=0可使B的第3列都为0

  • linspace(a,b,n)产生含n个元素的行向量,这n个元素线性地隔开并且包含a和b

  • plot(f(500,:))显示通过其间的水平扫描线

  • ndims(A)给出A的维数

ps(标准数组) : zero(M,N), ones(M,N), ture(M,N), false(M,N), magic(M), rand(M,N), randn(M,N)

MATLAB编程

M文件组成部分为:

  • 函数定义行
  • H1行
  • 帮助文本
  • 函数体
  • 命令

函数定义行形式:

function [outputs]=name(inputs)

例如:

function [s,p]=sumprod(f,g)

ps :输出用中括号,输入用圆括号

MATLAB不复制信息,在B=A中MATLAB将做一个BB等于A的“记录”,并不复制,除非A的内容以后发生了改变。图形等价于二维数组

运输符 名称
& AND
| OR
~ NOT
== 逻辑等于
~= 不等于
> 大于
>= 大于等于
< 小于
<= 小于等于
函数 返回值
ans 最新的变量,未赋给表达值输出变量的给它
eps 浮点数的相对精度
pi π
代码优化
  1. 向量化循环

    向量化意味着简单地将for循环和while循环转化为等价的向量或矩阵运算

    ps:“向量化”(完全抽象出循环并仅描述对数组而不是元素的操作)是重写循环的过程,以便与其同时处理(例如)数组的4个元素N / 4次,而不是处理数组的单个元素N次。

    例子:

    for x = 1:M
        f(x) = A * sin((x-1)/(2*pi));
    end
    
    %向量化
    
    x = 0:M-1;
    f = A*sin(x/(2*pi));
    

    向量化代码的运行速度要比基于for循环的代码的运行速度快很多

  2. 预处理数组

    处理大数组时,预分配可以加快执行速度,也可以帮助我们减少存储器碎片。预处理通过计算开始时就允许MATLAB为大数据构造保留足够的存储空间,来阻止无连续空间的情形出现。

    f = zeros(1024);
    
  3. 单元数组、结构体

    单元数组类似于列表,通过数字索引取值(从1开始),例如a为结构,a{1}取值。(单元数组的重要属性包含的是参量的副本,而不是指向该参量的指针)

    结构类似于c语言中的结构体,例子:

    >> S.name='shaoye';
    >> S.age=18;
    >> S.name
    ans =
    shaoye
    

猜你喜欢

转载自www.cnblogs.com/foolshao/p/12906510.html