c++ - 为什么 OpenCV 的 polarWarp 会在某些图像中引入伪影?
问题描述
我有一些小的(通常约为 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);
这是一个可以正常工作的图像:
这是一张图像,分别使用 NEAREST、LINEAR 和 LANCZOS4,在向下约四分之一处产生了彩虹状的伪影,并在底部出现了一条灰色带:
...然后半径更长...
解决方案
这个问题的答案是 warpPolar() 调用需要一个额外的标志来指定如何填充源图像之外的像素。这修复了它:
warpPolar( m, polar, Size(), Point( mom.m10/mom.m00, mom.m01/mom.m00) , len, INTER_LINEAR | CV_WARP_FILL_OUTLIERS);
推荐阅读
- c - 代码块未定义对函数的引用错误。已经尝试将包含目录添加到项目构建选项
- python - Numpy:沿轴乘以第一个元素n个元素,其中n由数组给出
- python-3.x - Python:命令行,sys.argv,“如果 __name__ == '__main__'”
- antlr - “!”、“^”和“$”在 Antlr3 中是否有特殊含义?
- android - ADB shell命令刷新android手机屏幕
- c# - 在单独的窗口 XAML WPF C# 中加载绑定到字典的 DataGridView
- c# - 选择字段值相同的记录
- javascript - Javascript用Array的单双引号替换两个双引号
- sql-server - 如何在 Visual Studio 2019 中使用 SSDT 创建系统版本表?
- python - 在 Django 数据库中搜索生成的格式