LogPolar,把圖像映射到極指數空間。
基本介紹
- 外文名:LogPolar
- 含義:把圖像映射到極指數空間
- fillval:用於填充外點的值
- 詞性:名詞
基本信息,程式,
基本信息
LogPolar
void cvLogPolar( const CvArr* src, CvArr* dst, CvPoint2D32f center, double M, int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS ); src 輸入圖像。 dst 輸出圖像。 center 變換的中心,輸出圖像在這裡最精確。 M 幅度的尺度參數,見下面公式。 flags 插值方法和以下選擇標誌的結合
CV_WARP_FILL_OUTLIERS -填充輸出圖像所有像素,如果這些點有和外點對應的,則置零。
CV_WARP_INVERSE_MAP - 表示矩陣由輸出圖像到輸入圖像的逆變換,並且因此可以直接用於像素插值。否則,函式從map_matrix中尋找逆變換。
fillval 用於填充外點的值。
函式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(x^2+y^2))
phi=atan(y/x)
此函式模仿人類視網膜中央凹視力,並且對於目標跟蹤等可用於快速尺度和旋轉變換不變模板匹配。
程式
Example. Log-polar transformation.
#include <cv.h>
#include <highgui.h>
int main(int argc, char** argv)
{
IplImage* src;
if(argc == 2 && ((src=cvLoadImage(argv[1],1)) != 0 )) //讀取圖像並判斷是否讀取成功
{
IplImage* dst = cvCreateImage( cvSize(256,256), 8, 3 ); //圖像大小256X256,位深度8,3通道
IplImage* src2 = cvCreateImage( cvGetSize(src), 8, 3 );
cvLogPolar( src, dst, cvPoint2D32f(src->width/2,src->height/2), 40, CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS ); //以圖像中心位原點,縮放比例40,雙線性插值,
//空白部分填充黑色。
cvLogPolar( dst, src2, cvPoint2D32f(src->width/2,src->height/2), 40, CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS+CV_WARP_INVERSE_MAP );
cvNamedWindow( "log-polar", 1 );
cvShowImage( "log-polar", dst );
cvNamedWindow( "inverse log-polar", 1 );
cvShowImage( "inverse log-polar", src2 );
cvWaitKey(0);
}
return 0;
}