如何实现图片与像素值矩阵(或坐标)的互换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现图片与像素值矩阵(或坐标)的互换相关的知识,希望对你有一定的参考价值。

RT
例如我要把一张320*240像素的jpg图片转换为像素值矩阵/坐标集(存储为字符串->例txt文件,又如每像素存为R*G*B三组数,不知道这样够吗?还是图像还有其他数据信息?),并可以把这个字符串文件又转换为图片。
希望大家可以给点提示或有经验者分享下实现方法。
!感兴趣的实现方法,大家可以在如下语言给出方法:
python or php or c++
感激不尽!!

参考技术A 请参考:
MATLAB像素颜色的表达方式
By Steve Eddins
http://www.ilovematlab.cn/thread-13305-1-1.html

一种图像类型即代表了一种从矩阵值到像素值的映射方式。MATLAB有三种基本的图像类型:
Truecolor——数码相机的格式,广泛用于计算机图形。
Indexed 和 scaled indexed ——经常用来显示科学或者工程数据,使用的颜色比例可以代表不同的数据单位。

Image Processing Toolbox 可以识别另外两种类型:
Grayscale
——经常用在图像处理和图像分析算法中
Binary
——经常用做为一个封装来表示图形的分割结果或者是感兴趣的区域。

Truecolor Images

在这种格式的图里,每一个像素由三个数字表示:红,绿,蓝,整个图形由一个M-N-3的三维矩阵表达。图形显示函数和图形处理工具箱将这种矩阵视为一个truecolor图形。本回答被提问者采纳
参考技术B 在matlab中小波工具箱下非常容易

张正友平面定标法

图像坐标系与物理坐标系

在数字图像处理中,一副二维图片由一个二维矩阵表征。矩阵元素所在的位置即为该点坐标,矩阵元素的大小即为像素值的大小。但是,图像坐标系是离散的且没有物理尺寸,无法和现实世界建立联系。因此,我们引入物理坐标系。

 

技术图片

如上图,u和v是图像坐标系的轴,O0为其原点。物理坐标系以图像坐标系的O1(u0,v0)为原点,x,y轴分别平行于u,v轴。设dx,dy为单位像素在x和y方向上的尺寸。其中,u0,v0,dx,dy为相机的内参。由上述可得,物理坐标系中的坐标(u,v)有:

u = x/dx + u0,v = y/dy + v0     (1)

将(1)式变成矩阵形式,有:

技术图片

相机坐标系与世界坐标系 

与上述两个二维坐标系不同,相机坐标系Oc-XcYcZc属于三维空间坐标系。其中,Oc为光心,Zc为光轴,Xc与Yc分别平行于物理坐标系的x和y轴。相机在不同的地方对场景进行拍摄,每个视角下的场景都以该视角下的相机坐标系为参考坐标系,这就造成了现实世界中的同一点在不同的相机坐标系中有着不同的坐标。所以,构建一个三维坐标系——世界坐标系Ow-XwYwZw,用于标识不同视角下各相机坐标系的相对位置。

技术图片

物理坐标系,相机坐标系和世界坐标系如上图所示。其中OcO1的长度为相机的焦距。有一点P,其在相机坐标系的坐标为(Xc,Yc,Zc),在世界坐标系的坐标为(Xw,Yw,Zw),则有变换矩阵,使得:

技术图片

其中,R为旋转矩阵,表示两系的旋转关系;t为平移向量,表示Oc和Ow之间的相对位置。

相机几何模型

现有三维空间中的点P(Xc,Yc,Zc)投影到成像面上的点p(x,y)。设f为相机的焦距。

技术图片

则根据相似三角形有:

x = fXc/Zc,y = fYc/Zc    (2)

将(2)式变成矩阵形式,有:

技术图片

则由式(1),(2)得:

技术图片

其中,fx = f/dx,fy = f/dy,分别为相机在x轴和y轴方向上的焦距。矩阵K1由相机内部参数fx,fy,u0,v0决定,矩阵K2由外部参数R和t决定。

张正友平面定标法

该方法的标定物是一副黑白棋盘格,称其为标定盘。如下图:

技术图片

内角点:上图中每四个黑白格中间的角点

由前述可得:

技术图片

在该算法中,以标定盘上第一个内角点为参考系的原点,Zw轴垂直于标定板所在平面,即标定板位于Z = 0平面上。令λ=1/Zc,则有:

技术图片

其中H = [h1  h2  h3] = λK[r1  r2  t],称H为单应矩阵。则有:

r1 = (1/λ)K-1h1,r2 = (1/λ)K-1h2

由旋转矩阵的单位正交性,即每列模长为1,不同列相互正交得:

技术图片

上下两式联立可得:

技术图片

上述两式是关于内部参数的两个基本约束。

设矩阵A:

技术图片 

由上式可知,矩阵A是一个对称矩阵,则令向量a:

技术图片

则有:

技术图片

其中γijT  = [hi1hj1  hi1hj2 + hi2hj1  hi2hj2  hi3hj1 + hi1hj3  hi3hj2 + hi2hj3  hi3hj3]T 

这里如此设计γijT 的原因我也不清楚。但经过简单验算便可知道,上式的确是相等的。

 由内部参数的两个基本约束得:

技术图片

 若有n张不同角度的标定板图片,则有矩阵V(2n X 6):Va = 0

由上述,即可求得内参K。

由H  =  λK[r1  r2  t]得,

K-1H = λK[r1  r2  t]

则令N = K-1H  = [n1  n2  n3],有:(旋转矩阵的列向量模长为1)

技术图片

至此,求得外参R和t。

 参考论文: 

(1)基于结构光的小型物体三维重建技术_高爽

(2)Flexible camera calibration by viewing a plane from unknown orientations

以上是关于如何实现图片与像素值矩阵(或坐标)的互换的主要内容,如果未能解决你的问题,请参考以下文章

Egret中图片颜色的改变,颜色矩阵

cv::Mat 与 float 互换,实现 argmax 得到像素点分类

Matlab中如何实现通过鼠标在图上点击一下,而获得所点击点在该图的像素矩阵中的位置。

OpenCV3图像操作

如何利用matlab导入并提取jpg彩色图像像素点的坐标及其RGB值?想要完整的编码。谢谢哈。

在matlab中,怎么把图片中的图像轮廓坐标找出来?