图像处理基础知识总结1

来源:互联网 发布:怎么写好网络小说知乎 编辑:程序博客网 时间:2024/05/17 05:16

图像处理基础知识总结(1)

前言:从接触图像处理、生物特征识别、视频编解码、机器学习已两年有余,还没有系统的总结过,正好最近刷一下Tsinghua的Tipa课件和PKU的Digital Image Processing,对以前的图像处理基础知识做一些回顾,整理成笔记形式,代码和示例基于matlab给出。主要包含内容:

  • 原理总结
  • 部分matlab实现
  • matlab源代码解析

1.图像坐标变换

  • 旋转
  • 尺度(缩放)
  • 平移
  • 错切
  • 反射
  • 投影
  • 反变换

1.1 旋转

原理

绕原点逆时针旋转θ度角的变换公式是x′=x cosθ − ysinθ与y′=xsinθ+ycosθ,在二维空间中用矩阵表示为:
cmd-markdown-logo

但是为了可以表示仿射变换,需要使用齐次坐标,常见的矩阵变化都是在三维下进行的,在矩阵中增加一列与一行,除右下角的元素为1外其它部分填充为0,通过这种方法,所有的线性变换都可以转换为仿射变换。此时旋转矩阵如下所示

logo

仿射变换:包含平移及线性映射,为了使矩阵乘法可同时实现这两个功能,需要所有向量在其末端扩长 “1”且所有矩阵都于底部添加一排零,右边扩长一列转换向量,及右下角添加一个 “1”。
注:仿射变换具体请参考:wiki_仿射变换

MATLAB 实现

利用花花公子杂志上的Lean的部分图像进行示例(-.- 关键部分都被数字图像处理的作者们截掉了,只有一张lean的脸保留了下来。。。。天真的我),matlab中图像旋转很简单,调用imrotate函数即可

clc;clear;close all;%% image rotateimg = imread('/Users/Documents/MATLAB/lena.jpg');rotateImg = imrotate(img,30); figure;subplot(1,2,1),imshow(img);subplot(1,2,2),imshow(rotateImg);

效果如下:可以看到图像逆时针旋转了30度
cmd-markdown-logo

简单解析

打开matlab中imrotate函数源码,在命令行敲

type imrotate

找出关键信息可以看到,图像旋转利用矩阵旋转实现,旋转矩阵为tform

tform = affine2d([cosd(ang) -sind(ang) 0; sind(ang) cosd(ang) 0 ; 0 0 1])B = imwarp(A,tform,method,'OutputView',Rout, 'SmoothEdges',true);

1.2 尺度(缩放)

基于上文,即坐标变换通常3x3大小的矩阵完成,对矩阵中的每一点生成[x,y,1]三维向量与变换矩阵相乘,便得到新矩阵,大多数图像几何变换都基于矩阵完成,用字母表示为从A到I,如下图。
cmd-markdown-logo
则对于缩放有
cmd-markdown-logo

1.3 平移

cmd-markdown-logo

1.4 错切

错切常分为x轴错切或者y轴错切,平行于x轴的切变为x′=x+ky与y′=y,
平行于y轴的切变为x′=x与y′=y+kx,矩阵实现参考下图

cmd-markdown-logo

1.5 反射

二维反射变换如下,三维的基于上文变为增广矩阵即可。
cmd-markdown-logo

1.6 投影

cmd-markdown-logo

1.7 反变换

cmd-markdown-logo
cmd-markdown-logo

2.像素、邻域、距离

像素

像素定义类似与眼球的杆状体,每张图片都是像素点的集合,常见的显示器描述就是以像素为单位,例如”640乘480”,它有横向640像素和纵向480像素(就像VGA显示器那样),因此其总数为640 × 480 = 307,200像素(30.72万像素)。
数字图像均由像素点构成,依据坐标原点位置的不同常分为两类,每个像素点标示为I(r,c)或f(x,y)。
**灰度图像的值域I是一个一元标量: I=greylevel
彩色图像的值域I是一个多元向量: 如I=(r,g,b)**

img

每一个像素所能表达的不同颜色数取决于比特每像素(BPP,bit per pixel)。这个最大数可以通过取2的色彩深度次幂来得到。例如,常见的取值有
8 bpp:256色,亦称为“8位”;
16 bpp:216=65,536色,称为高彩色”;
24 bpp:224=16,777,216色,称为真彩色,亦称为“24位色”;
32 bpp:224 +28,电脑领域较常见的32位色并不是表示232种颜色,而是在24位色基础上增加了8位(28=256级)的灰阶,因此32位的色彩总数和24位是相同的,32位也称为全彩。
(注:对于超过8位的深度,这些数位就是三个分量(红绿蓝)的各自的数位的总和。一个16位的深度通常分为5位红色和5比特蓝色,6比特绿色。24位的深度一般是每个分量8位。
一张普通图片的像素点如下图所示:

cmd-markdown-logo

注:
1.用matlab以矩阵形式读入即可查看图片属性,常见为8位灰度或者3通道RGB24位彩色图
2.人眼只能分辨1000种颜色

邻域

2.2.1. 4邻域

像素p(x,y)的4邻域是:(x+1,y);(x-1,y);(x,y+1);(x,y-1)
用N4(p)表示像素p的4邻域

2.2.2. D邻域

像素p(x,y)的D邻域是:(x-1,y-1);(x-1,y+1);(x+1,y+1);(x+1,y-1)
用ND(p)表示像素p的D邻域

2.2.3. 8邻域

4邻域的点+ D邻域的点
用N8p表示像素p的8邻域
N8p = N4p + NDp

2.2.4. 连通性

对于灰度值在V中的像素p和q,如果q在集合
N4p中,则称这两个像素是4连通的,8联通与此类似

距离

像素间的距离分为三种
- 欧几里得距离(Euclidean distance)
- D4距离或城市距离(Manhattan distance)
- D8距离或棋盘距离(Chessboard distance)

2.3.1. 欧式距离

在欧氏距离定义下,具有与(x,y)距离小于等于某 个值r的像素是:包含在以(x,y)为圆心,以r为半 径的圆.像素p(x,y)和q(s,t)间的欧氏距离定义如下

2.3.2 城市距离

像素p(x,y)和q(s,t)间的城市距离定义如下:

具有D4 = 1的像素是(x,y)的4邻域,具有与(x,y)距离小于等于某个值r的那些像素形成直角菱形

2.3.3 棋盘距离

像素p(x,y)和q(s,t)间的 D8距离定义如下:

具有与(x,y)距离小于等于某个值r的那些像素形成正方形,具有D8 = 1的像素是(x,y)的8邻域

2.3.4 路径

一条从具有坐标(x,y)的像素p,到具有坐标(s,t)的像素q的路径,是具
有坐标(x0,y0),(x1,y1),…,(xn,yn)的不同像素的序列。
其中,(x0,y0) = (x,y),(xn,yn) = (s,t),(xi,yi) 和(xi-1,yi-1)是邻接的,1
≤ i ≤ n,n是路径的长度。
如果(x0,y0) = (xn,yn) ,则该路径是闭合路径。
可以用定义连通的类似方法定义4-路径和8-路径。

3.图像显示

抖动技术

误差抖动常用在图像/视频压缩中,用来降低色彩的深度。如下图所示,256级(8bit)灰度过度 【图二】将图一转换成16级(8bit)灰度(高4位不变,低4位置0) 【图三】将图一用误差扩散法转换成16级灰度。
可看出图3效果好于图2

4.采样与量化

大多数传感器(如CMOS)的输出是连续信号波形,为了产生一幅数字图像,需要把连续的感知数据转化为离散的数字形式,这包括两种处理:取样和量化
- 取样(Sampling):图像函数定义域(空间坐 标)的数字化
- 量化(Quantization):图像函数值域(灰度值) 的数字化

4.1 采样

采样通常为求每个像素对应区域内的积分均值,实际中,模拟信号都是电流\电压值,经过A/D转换为数字信号,具体可参考VB工业编程。

采样点越多,数据量越多,图像越清晰

4.2量化

量化常分为2^m,m=8最常见,即把模拟信号最大最小值中分段量化

量化阶数越高,视觉效果越好

5.图像质量

  • 亮度
  • 对比度(最大亮度/最小亮度)
  • 尺寸大小
  • 细微层次(模糊)
  • 颜色饱和度

6.图像存储与格式

(1) BMP(BitMaP)格式
(2) GIF(Graphics Interchange Format)格式
(3) TIFF(Tagged Image Format File)格式
(4) JPEG(Joint Photographic Expert Group)格式

关于图像存储与格式,需要大篇篇幅去论述,通常分为head和data两部分,在开发中不会过多涉及格式问题,因此不再详细叙述,知识总结1就先写到这里,莫名累。。。。。

参考链接

wiki-变换矩阵
wiki-像素
pku-cys
Tsinghua-Tipa

作者:@Awiny

原创粉丝点击