我有一些小的(通常约为60x60或更少)的BGR图像,我正在使用OpenCV的warpPolar为它们生成极点投影。大多数情况下,它工作得很好,但偶尔我会得到一张图像(来自与工作正常的图像相同的摄像头来源),其中有分散的伪像。三种不同的插值方法都会产生瑕疵。我确实发现增加极点半径可以消除伪影,但有人能解释一下为什么这会有所不同吗?
下面是表示对warpPolar调用的代码:
Mat m = imread( "image.png", IMREAD_COLOR);
Moments mom = moments( m);
int len = //... semi-major axis*2 for ellipse fit
warpPolar( m, polar, Size(), Point( mom.m10/mom.m00, mom.m01/mom.m00) , len, INTER_LINEAR);
这是一张工作正常的图像:
--warpPolar-->
下面是一张图像,它分别使用最近点、线性和LANCZOS4,产生了大约四分之一的彩虹伪影和底部的灰色条带:
--warpPolar->
...and,那么半径更大...
发布于 2021-01-15 09:12:38
这个问题的答案是,warpPolar( )调用需要一个额外的标志来指定如何填充源图像外部的像素。这就解决了这个问题:
warpPolar( m, polar, Size(), Point( mom.m10/mom.m00, mom.m01/mom.m00) , len, INTER_LINEAR | CV_WARP_FILL_OUTLIERS);
https://stackoverflow.com/questions/65722020
复制相似问题