版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24894159/article/details/53359546
在模式识别及计算机视觉中,要经常进行图像的变化。
例如:在识别手写数字中,我们可能在广泛应用中要求所有的图片都是20*20这么好的规格。所以,我们就需要进行缩放来达到目的。
今天来总结下学到的图像的基本变换。
首先我们计
相信用过java&android中图像变化的对Matrix这个对象有所了解。想再了解下可以看这位博主写的博客,非常详细!
http://www.cnblogs.com/qiengo/archive/2012/06/30/2570874.html
这里我介绍octave以此来实现图像变化的方法。
我们以尺度变化为例
变换名称 | 仿射矩阵 | 坐标公式 |
---|---|---|
恒等变换 |
|
|
尺度变换 |
|
|
旋转变换 |
|
|
平移变换 |
|
|
偏移变换 |
|
|
实际上可以按照两种方式使用上表格:
- 前向映射
按照上述0式直接进行计算,不过存在一个问题:输入图像中的两个和多个像素可被映射到同一个位置;还可能产生某些像素根本没有赋值的情况
- 反响映射
定义:扫描输出像素的位置,并在每一个位置
以下为代码实现大小变化函数
function [Image] = scale (img, scal)
T = [1,0,0;0,1,0;0,0,1];
tT = T.*scal;
tT(3,3) = 1;
flag = sign(scal);
[x,y,z] = size(img);
tx = ceil(x*scal);
%ceil为向上取整函数
ty = ceil(y*scal);
Image = zeros(tx,ty);
for i=1:tx
for j=1:ty
temp = ceil((tT^-1)*[i;j;1]);
Image(i,j) = img(temp(1),temp(2));
end;
end;
endfunction
结果图片不太明显,不过,可以看红框,变化成功,图像基本没有失真。