如何对深度图像和彩色图像小波变换进行距离变换

查看: 8041|回复: 14|关注: 0
求高手帮忙,如何用MATLAB把彩色图像或灰度图转换成深度图
<h1 style="color:# 麦片财富积分
新手, 积分 5, 距离下一级还需 45 积分
刚刚来到这里,发现这里高手很多。赶快来请高手帮忙。我的毕业论文是立体图像的DIBR技术研究,现在正在把普通的图片转化成深度图。这个深度图不同于灰度图,是表示图像中物体与摄像头之间距离的图片,也属于黑白图。这个我现在用数学算法能计算出每个像素的深度信息,不知这个对转化图像有没有什么帮助。想问问有没有什么程序能把jpg图片转换成深度图。或者提出什么建议也行,谢谢各位
<h1 style="color:# 麦片财富积分
回复 1# zwy19862 的帖子
是啊 我也是想要吧普通图片转换为深度图画出来
<h1 style="color:# 麦片财富积分
回复 1# zwy19862 的帖子
怎么没人回复啊
<h1 style="color:# 麦片财富积分
关注者: 2
原帖由 zwy19862 于
22:14 发表
刚刚来到这里,发现这里高手很多。赶快来请高手帮忙。我的毕业论文是立体图像的DIBR技术研究,现在正在把普通的图片转化成深度图。这个深度图不同于灰度图,是表示图像中物体与摄像头之间距离的图片,也属于黑白图。这个我现 ...
你图片每个像素的深度都能算出来了,深度图,应该好作吧。。。你记录图片中,目标在图片中的
位置信息(x , y),再加上深度z,用三纬画图,不就做出深度图了吗???
<h1 style="color:# 麦片财富积分
关注者: 2
原帖由 特雷西223 于
08:51 发表
是啊 我也是想要吧普通图片转换为深度图画出来
单一图片,想转深度图,很难,外国好象有人做过。。。
就是将2d图片,直接转3d
如果,是两部摄相机照出的图片,根据人视觉原理,算出视觉夹角,而后就可以算出人与物体的距离。。。这样深度比较好算。。。
<h1 style="color:# 麦片财富积分
wangming24 发表于
单一图片,想转深度图,很难,外国好象有人做过。。。
就是将2d图片,直接转3d
如果,是两部摄相机照出的 ...
是,我也在找单幅图像恢复深度的方法!请大家赐教!
<h1 style="color:# 麦片财富积分
我也在寻找单幅图像恢复深度的方法!请大家赐教!
<h1 style="color:# 麦片财富积分
关注者: 2
xueximatlab2011 发表于
我也在寻找单幅图像恢复深度的方法!请大家赐教!
一张普通2d照片,照相的时候应该都能在照片里留下各个物体的大部分深度信息,也有部分丢失了,丢失的部分应该是暴光和没有光线引起的。有些丢失信息,应该可以靠逻辑推导出。
1。首先,应该是识别图象中各个物体,人脑看到图片一下子就能区分出各个物体。。。但是去自动区分每个物体,应该是非常困难的,毕竟脑神经发达的多,才能够识别物体。因此,我们只能用手工去圈定物体(比如用photo shop选择工具),而后再去算深度。。。
2。比如人头深度计算,我们应该可以根据光线,质地等来计算深度。。。
3。要根据质地和光线来计算人脸深度,应该要设定人脸三纬坐标系,而后算出人头姿态矩阵。再算出光线方向。
4。根据质地信息,光线信息,几何信息等综合算出人脸曲面。。。
5。如果能做出这个软件,用到游戏玩家上,产生三纬头像,钱途无量。。。
<h1 style="color:# 麦片财富积分
楼主可以发一个给我吗,我也是立体成像,但是深度信息目前还没弄出来,谢谢啦,,如若有用,必当感谢
<h1 style="color:# 麦片财富积分
关注者: 1
楼主可以发一个给我么?&&谢谢楼主了,在做毕设。。
站长推荐 /3
Powered by1060人阅读
图像处理(12)
距离变换是一种常见的二&#20540;图像处理算法,用来计算图像中任意位置到最近边缘点的距离,常见的距离测度函数有切削距离,街区距离和欧式距。切削距离和街区距离是欧式距离的一种近&#20284;。
基于距离变换的匹配的原理是计算模板图覆盖下的那块子图与模板图之间的距离,也就是计算子图中的边缘点到模板图中最近的边缘点的距离,这里采用欧式距离,并对欧式距离进行近&#20284;,认为与边缘4邻域相邻的点的距离为0.3,8邻域相邻的点的距离为0.7,不相邻的点的距离都为1。
opencv程序如下:
#include &stdafx.h&
#include &opencv2/opencv.hpp&
#include &highgui.h&
#include &math.h&
unsigned long uint32;
unsigned int
unsigned char uint8;
IplImage *src_gray1, *src_gray2, *src_gray3;
IplImage *temp_gray1, *temp_gray2, *temp_gray3;
IplImage *D
TemplatePixelm10 = 0;
TemplatePixelm01 = 0;
TemplatePixeln01 = 0;
TemplatePixeln10 = 0;
TemplatePixelm1n1 = 0;
TemplatePixelm1n0 = 0;
TemplatePixelm0n1 = 0;
TemplatePixelm0n0 = 0;
void AllocateImage(IplImage* I,IplImage* T)
//给图像分配大小
= cvGetSize(I);
CvSize sz_T = cvGetSize(T);
src_gray1 = cvCreateImage( sz, IPL_DEPTH_8U, 1);
//原图的三个通道
src_gray2 = cvCreateImage( sz, IPL_DEPTH_8U, 1);
src_gray3 = cvCreateImage( sz, IPL_DEPTH_8U, 1);
temp_gray1 = cvCreateImage( sz_T, IPL_DEPTH_8U, 1);
//模板的三个通道
temp_gray2 = cvCreateImage( sz_T, IPL_DEPTH_8U, 1);
temp_gray3 = cvCreateImage( sz_T, IPL_DEPTH_8U, 1);
Dist = cvCreateImage(sz_T,IPL_DEPTH_8U,1);
void CalTemplateDist(IplImage* I,IplImage* Dist, long* Nb)
//计算在模板图对应位置上的距离
for ( i=0; i&I-& i++ )
uint8* ptr = (uint8*)( I-&imageData + i*I-&widthStep );
for ( j=0; j&I-& j++ )
uint8 Pixel = ptr[j];
if(Pixel==0)
if( i==0 && j==0 )
//第一行第一个点
TemplatePixelm10
= ptr[j+1];
TemplatePixeln10
= *( I-&imageData + (i+1)*I-&widthStep + j );
TemplatePixelm1n1 = *( I-&imageData + (i+1)*I-&widthStep + j+1 );
if( TemplatePixelm10==0 || TemplatePixeln10==0 )
dis = 0.3;
else if( TemplatePixelm1n1==0 )
dis = 0.7;
else if( i==0 && j&0 && j&(I-&width-1) )
TemplatePixelm10
= ptr[j+1];
TemplatePixelm01
= ptr[j-1];
TemplatePixeln10
= *( I-&imageData + (i+1)*I-&widthStep + j );
TemplatePixelm1n1 = *( I-&imageData + (i+1)*I-&widthStep + j+1 );
TemplatePixelm0n1 = *( I-&imageData + (i+1)*I-&widthStep + j-1 );
if( TemplatePixelm10==0 || TemplatePixeln10==0 || TemplatePixelm01==0 )
dis = 0.3;
else if( TemplatePixelm1n1==0 || TemplatePixelm0n1==0 )
dis = 0.7;
else if( i==0 && j==(I-&width-1) )
//第一行最后一个点
TemplatePixelm01
= ptr[j-1];
TemplatePixeln10
= *( I-&imageData + (i+1)*I-&widthStep + j );
TemplatePixelm0n1 = *( I-&imageData + (i+1)*I-&widthStep + j-1 );
if( TemplatePixeln10==0 || TemplatePixelm01==0 )
dis = 0.3;
else if( TemplatePixelm0n1==0 )
dis = 0.7;
else if( j==0 && i&0 && i&(I-&height-1) )
TemplatePixelm10
= ptr[j+1];
TemplatePixeln01
= *( I-&imageData + (i-1)*I-&widthStep + j );
TemplatePixeln10
= *( I-&imageData + (i+1)*I-&widthStep + j );
TemplatePixelm1n1 = *( I-&imageData + (i+1)*I-&widthStep + j+1 );
TemplatePixelm1n0 = *( I-&imageData + (i-1)*I-&widthStep + j+1 );
if( TemplatePixelm10==0 || TemplatePixeln10==0 || TemplatePixeln01==0 )
dis = 0.3;
else if( TemplatePixelm1n1==0 || TemplatePixelm1n0==0 )
dis = 0.7;
else if( i&0 && i&(I-&height-1) && j==(I-&width-1) )
//最后一列
TemplatePixelm01
= ptr[j-1];
TemplatePixeln01
= *( I-&imageData + (i-1)*I-&widthStep + j );
TemplatePixeln10
= *( I-&imageData + (i+1)*I-&widthStep + j );
TemplatePixelm0n1 = *( I-&imageData + (i+1)*I-&widthStep + j-1 );
TemplatePixelm0n0 = *( I-&imageData + (i-1)*I-&widthStep + j-1 );
if( TemplatePixeln10==0 || TemplatePixelm01==0 || TemplatePixeln01==0 )
dis = 0.3;
else if( TemplatePixelm0n1==0 || TemplatePixelm0n0==0 )
dis = 0.7;
else if( j==0 && i==(I-&height-1) )
//最后一行最后一个点
TemplatePixelm10
= ptr[j+1];
TemplatePixeln01
= *( I-&imageData + (i-1)*I-&widthStep + j );
TemplatePixelm1n0 = *( I-&imageData + (i-1)*I-&widthStep + j+1 );
if( TemplatePixelm10==0 || TemplatePixeln01==0 )
dis = 0.3;
else if( TemplatePixelm1n0==0 )
dis = 0.7;
else if( j&0 && j&(I-&width-1) && i==(I-&height-1) )
//最后一行
TemplatePixelm10
= ptr[j+1];
TemplatePixelm01
= ptr[j-1];
TemplatePixeln01
= *( I-&imageData + (i-1)*I-&widthStep + j );
TemplatePixelm1n0 = *( I-&imageData + (i-1)*I-&widthStep + j+1 );
TemplatePixelm0n0 = *( I-&imageData + (i-1)*I-&widthStep + j-1 );
if( TemplatePixelm10==0 || TemplatePixeln01==0 || TemplatePixelm01==0 )
dis = 0.3;
else if( TemplatePixelm1n0==0 || TemplatePixelm0n0==0 )
dis = 0.7;
else if( j==(I-&width-1) && i==(I-&height-1) )
//最后一行最后一个点
TemplatePixelm01
= ptr[j-1];
TemplatePixeln01
= *( I-&imageData + (i-1)*I-&widthStep + j );
TemplatePixelm0n0 = *( I-&imageData + (i-1)*I-&widthStep + j-1 );
if( TemplatePixeln01==0 || TemplatePixelm01==0 )
dis = 0.3;
else if( TemplatePixelm0n0==0 )
dis = 0.7;
TemplatePixelm10
= ptr[j+1];
TemplatePixelm01
= ptr[j-1];
TemplatePixeln01
= *( I-&imageData + (i-1)*I-&widthStep + j );
TemplatePixeln10
= *( I-&imageData + (i+1)*I-&widthStep + j );
TemplatePixelm1n0 = *( I-&imageData + (i-1)*I-&widthStep + j+1 );
TemplatePixelm0n0 = *( I-&imageData + (i-1)*I-&widthStep + j-1 );
TemplatePixelm1n1 = *( I-&imageData + (i+1)*I-&widthStep + j+1 );
TemplatePixelm0n1 = *( I-&imageData + (i+1)*I-&widthStep + j-1 );
if( TemplatePixeln01==0 || TemplatePixelm01==0 || TemplatePixelm10==0 || TemplatePixeln10==0 )
dis = 0.3;
else if( TemplatePixelm0n0==0 || TemplatePixelm1n0==0 || TemplatePixelm0n1==0 || TemplatePixelm1n1==0 )
dis = 0.7;
*(Dist-&imageData + i*Dist-&widthStep + j) = (uint8)(dis*255);
void dist_match(IplImage* src_img, IplImage* Dist,double MinMatch, CvPoint* pt, long* Na, long* Nb)
//距离匹配
int i,j,m,n;
double SigmaGT;
uint8 SrcV
double DistV
for ( i=0; i&(src_img-&height - Dist-&height); i++ )
for ( j=0; j&( src_img-&width - Dist-&width ); j++ )
SigmaGT = 0;
for( m=0; m&Dist-& m++ )
for( n=0; n&Dist-& n++ )
= *( src_img-&imageData + (i+m)*src_img-&widthStep +j+n );
if(SrcValue==0)
DistValue = (double)*( Dist-&imageData +m*Dist-&widthStep + n )/255;
SigmaGT += DistV
if( (*Na) & (*Nb) )
Match = ( SigmaGT + (*Na) - (*Nb) )/( (*Na) + (*Nb) );
Match = ( SigmaGT + (*Nb) - (*Na) )/( (*Na) + (*Nb) );
if( Match & MinMatch )
MinMatch = M
//距离匹配的最小值就是匹配的位置
int _tmain(int argc, _TCHAR* argv[])
IplImage* src_img, *temp_
//定义变量
double MinMatch = 1000;
CvPoint MatchPoint = cvPoint(1,1);
long Na=0,Nb=0;
//像素0的个数
= cvLoadImage(&Images/距离变换.bmp&);
//读入两幅图
temp_img = cvLoadImage(&Images/距离变换模板.bmp&);
AllocateImage( src_img, temp_img );
cvSplit( src_img, src_gray1, src_gray2, src_gray3, 0);
//将两幅三通道图像分解为3幅单通道图像
cvSplit( temp_img, temp_gray1, temp_gray2, temp_gray3, 0);
CalTemplateDist(temp_gray1, Dist, &Nb);
dist_match(src_gray1, Dist, MinMatch, &MatchPoint, &Na, &Nb);
cvRectangle(src_img, MatchPoint, cvPoint(MatchPoint.x+49, MatchPoint.y+39), cvScalar(0, 0, 255, 0), 1,8,0);
cvNamedWindow(&my picture&,CV_WINDOW_AUTOSIZE);
cvNamedWindow(&my template&,CV_WINDOW_AUTOSIZE);
cvNamedWindow(&my Dist&,CV_WINDOW_AUTOSIZE);
cvShowImage(&my picture&,src_img);
cvShowImage(&my template&,temp_gray1);
cvShowImage(&my Dist&,Dist);
cvWaitKey(0);
cvReleaseImage(&src_img);
cvReleaseImage(&temp_img);
cvReleaseImage(&src_gray1);
cvReleaseImage(&src_gray2);
cvReleaseImage(&src_gray3);
cvReleaseImage(&temp_gray1);
cvReleaseImage(&temp_gray2);
cvReleaseImage(&temp_gray3);
cvDestroyWindow(&my picture&);
cvDestroyWindow(&my template&);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:36978次
排名:千里之外
原创:29篇
(3)(2)(8)(8)(12)&#xe621; 上传我的文档
&#xe602; 下载
&#xe60c; 收藏
该文档贡献者很忙,什么也没留下。
&#xe602; 下载此文档
正在努力加载中...
图像灰度图的距离变换与点运算操作
下载积分:100
内容提示:图像灰度图的距离变换与点运算操作
文档格式:DOCX|
浏览次数:1|
上传日期: 21:12:47|
文档星级:&#xe60b;&#xe612;&#xe612;&#xe612;&#xe612;
全文阅读已结束,如果下载本文需要使用
&#xe71b; 100 积分
&#xe602;下载此文档
该用户还上传了这些文档
图像灰度图的距离变换与点运算操作
官方公共微信求助啊!!!怎么在kinect的深度图像和彩色图像之间建立单应矩…_kinect吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:3,959贴子:
求助啊!!!怎么在kinect的深度图像和彩色图像之间建立单应矩…收藏
研究Kinect的RGB-D数据处理技术,在获得Kinect的彩色图和深度信息图像的基础上,利用成像原理以及几何知识建立两幅图像像素点之间的单应矩阵,并提取出两幅图像中同一个人员所在的区域。
原汁原味玩降魔,Q版西游尽显人物本色!
我也遇到相同的问题
楼主解决没
openNI中提供对齐操作,看一下这篇文章 看看能不能有帮助
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 图像深度图 距离 的文章

 

随机推荐