【问题标题】:Why is OpenCV's polarWarp introducing artifacts into some images?为什么 OpenCV 的 polarWarp 会在某些图像中引入伪影?
【发布时间】:2021-04-19 15:38:30
【问题描述】:

我有一些小的(通常约为 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]-->

这是一张图像,分别使用 NEAREST、LINEAR 和 LANCZOS4,在向下约四分之一处产生彩虹状伪影,并在底部出现一条灰色带:

--[warpPolar]->

...然后半径更长...

【问题讨论】:

  • 您是否正在显示或写入扭曲的图像?你能包括你用来显示它的代码吗?能发一下原图吗?

标签: c++ opencv polar-coordinates remap


【解决方案1】:

这个问题的答案是 warpPolar( ) 调用需要一个额外的标志来指定如何填充源图像之外的像素。这修复了它:

warpPolar( m, polar, Size(), Point( mom.m10/mom.m00, mom.m01/mom.m00) , len, INTER_LINEAR | CV_WARP_FILL_OUTLIERS);

【讨论】:

    猜你喜欢
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多