LogPolar

LogPolar把圖像映射到極指數空間 void cvLogPolar(

LogPolar

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(x2+y2)) 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&#91;1&#93;,1) != 0 ) { IplImage* dst = cvCreateImage( CvSize(256,256), 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 ); 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(); } return 0; }

相關詞條

相關搜尋

熱門詞條

聯絡我們