图像的Log-Polar极坐标变换
来源:互联网 发布:arena仿真软件下载 编辑:程序博客网 时间:2024/06/11 09:50
引言
本节介绍使用OpenCV 1.x如使 图像映射到极坐标实现。
预备知识
在opencv中,函数cvLogPolar功能是将图像映射到极坐标。
格式
/* Performs forward or inverse log-polar image transform */CVAPI(void) cvLogPolar( const CvArr* src, CvArr* dst, CvPoint2D32f center, double M, int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS));参数
- src 源图像
- dst 目标图像
- center 变换中心,此处输出精度最高。
- M 幅度尺度参数
- flags:为插值方法标示与下面选项的组合:
- CV_WARP_FILL_OUTLIERS 填充目标图像中的所有像素,如果某些像素对应于源图像之我的位置,则用0填充.
- CV_WARP_INVERSE_MAP 表示矩阵是从目标图像到源图像的反变换,因此,可以直接用于像素插值;否则,函数从map_matrix寻找变换。
- CV_WARP_FILL_OUTLIERS 填充目标图像中的所有像素,如果某些像素对应于源图像之我的位置,则用0填充.
说明
函数cvLogPolar使用如下变换公式对源图像进行变换。
- 正变换(未设置CV_WARP_INVERSE_MAP时): dst(phi,rho) ← src(x,y)
- 反变换(设置CV_WARP_INVERSE_MAP): dst(x,y) ← src(phi,rho)
其中, rho =M*log[sqrt(x2+y2)], phi = atan(y/x).
此函数可以用来模拟人类的中央视觉(foveal vision),并可以用于物体跟踪方面的尺度及旋转不变模板的快速匹配。
参考代码
OpenCV1.x版
IplImage *ImagePixel::ImageLogPolar(IplImage* pImg,int flags){ if(!pImg){ printf("Error:Load File in ImageLogPolar(..).\n"); exit(EXIT_FAILURE); } nWidth = pImg->width; nHeight = pImg ->height; IplImage* dst = cvCreateImage(cvGetSize(pImg),pImg->depth,pImg->nChannels); cvLogPolar(pImg,dst,cvPoint2D32f(nWidth/2,nHeight/2),40,flags); return dst;}
测试输出结果:
(a) 原始图像 (b) Log-Polar正变换 (b) Log-Polar 反变换
Python版
import sysdef on_mouse( event, x, y, flags, param ): if( not src ): return; if event==CV_EVENT_LBUTTONDOWN: cvLogPolar(src, dst, cvPoint2D32f(x,y), 40, CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS ); cvLogPolar(dst, src2, cvPoint2D32f(x,y), 40, CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS+CV_WARP_INVERSE_MAP ); cvShowImage( "log-polar", dst ); cvShowImage( "inverse log-polar", src2 ); if __name__ == "__main__": filename = "test.jpg" if len(sys.argv)>1: filename=argv[1] src = cvLoadImage(filename,1) if not src: print "Could not open %s" % filename sys.exit(-1) cvNamedWindow( "Original",0 ); cvNamedWindow( "Log-polar",0 ); cvNamedWindow( "inverse log-polar", 0 ); dst = cvCreateImage( cvSize(256,256), 8, 3 ); src2 = cvCreateImage( cvGetSize(src), 8, 3 ); cvSetMouseCallback( "original", on_mouse ); on_mouse( CV_EVENT_LBUTTONDOWN, src.width/2, src.height/2, None, None) cvShowImage( "original", src ); cvWaitKey();
关于Image Engineering & Computer Vision的更多讨论与交流,敬请关注本博和新浪微博songzi_tea.
- 图像的Log-Polar极坐标变换
- OpenCV学习之Log-Polar极坐标变换
- 基于Log-Polar变换的图像配准
- Log-polar转换表示从笛卡尔坐标到极坐标的变化
- 【图像处理】图像的极坐标变换
- Log-Polar——关于对数极坐标
- 图像的坐标变换
- 图像极坐标变换
- MATLAB描绘极坐标图像——polar
- 图像的基本坐标变换
- Polar极坐标投影(Java)
- 图像的几何变换之坐标映射
- 图像的几何变换之坐标映射
- Polar坐标投影(C++)
- 图像处理的坐标变换必备的矩阵知识
- 【算法+OpenCV】图像极坐标变换及基于OpenCV的实现
- 【算法+OpenCV】图像极坐标变换及基于OpenCV的实现
- Polar(极坐标)投影--主要用于天气雷达图
- Strut.xml内的属性,action属性,package属性,(一)
- HDFS架构(二)
- apt包管理工具介绍
- Spring中JdbcTemplate实现
- 黑马程序员-javaSE学习之集合框架
- 图像的Log-Polar极坐标变换
- hadoop在ubuntu下的安装配置
- VC调用DLL
- Java对象序列化
- “黑暗面程序员”java中我们所熟知的四中排序算法
- Accelerated C++ Exercise 5-10(回文数)
- hadoop集群安装教程
- webService服务启动,客户端调用报错
- 激活SEAndroid