图像处理基础知识总结(1)
前言:从接触图像处理、生物特征识别、视频编解码、机器学习已两年有余,还没有系统的总结过,正好最近刷一下Tsinghua的Tipa课件和PKU的Digital Image Processing,对以前的图像处理基础知识做一些回顾,整理成笔记形式,代码和示例基于matlab给出。主要包含内容:
- 原理总结
- 部分matlab实现
- matlab源代码解析
1.图像坐标变换
- 旋转
- 尺度(缩放)
- 平移
- 错切
- 反射
- 投影
- 反变换
1.1 旋转
原理
绕原点逆时针旋转θ度角的变换公式是x′=x cosθ − ysinθ与y′=xsinθ+ycosθ,在二维空间中用矩阵表示为:
但是
为了可以表示仿射变换,需要使用齐次坐标
,常见的矩阵变化都是在三维下进行的,在矩阵中增加一列与一行,除右下角的元素为1外其它部分填充为0,通过这种方法,所有的线性变换都可以转换为仿射变换
。此时旋转矩阵如下所示
仿射变换:包含平移及线性映射,为了使矩阵乘法可同时实现这两个功能,需要所有向量在其末端扩长 “1”且所有矩阵都于底部添加一排零,右边扩长一列转换向量,及右下角添加一个 “1”。
注:仿射变换具体请参考:wiki_仿射变换
MATLAB 实现
利用花花公子杂志上的Lean的部分图像进行示例(-.- 关键部分都被数字图像处理的作者们截掉了,只有一张lean的脸保留了下来。。。。天真的我),matlab中图像旋转很简单,调用imrotate函数即可
clc;clear;close all;
%% image rotate
img = imread('/Users/Documents/MATLAB/lena.jpg');
rotateImg = imrotate(img,30);
figure;
subplot(1,2,1),imshow(img);
subplot(1,2,2),imshow(rotateImg);
效果如下:可以看到图像逆时针旋转了30度
简单解析
打开matla