我正在开发一个使用opencv和qt的软件来绘制数据点.我需要能够填写不完整的数据的图像.我想在我所拥有的点之间进行插值.任何人都可以推荐可以帮助我的图书馆或者功能.我以为也可能是opencv reMap方法,但我似乎无法让它工作.
数据是强度值的2-d矩阵.我想创建一个有些图像.它是一个学校项目.
解决方法
唷!大题目
“正确”答案取决于您的问题领域和您正在做的各种细节.
在一个维度上进行插值需要做出一些选择.我会假设你在一个规则的网格上绘制,但是你的一些网格点没有数据.大问题:缺点是稀疏还是大斑点?
你不能添加信息,所以你只是想建立一些看起来不错的东西.
概念上简单的建议(但执行可能有些工作):
对于缺少数据的每个区域,确定所有边缘点.这是在这个图中找到x的
oooxxooo oox..xoo oox...xo ox..xxoo oox.xooo oooxoooo
其中的是缺点数据,x和o有数据(对于单个缺失点,这将是四个最近的邻居).在每个丢失的数据点上填充平均值超过此Blob周围的边缘点.为了使其顺利,将每个点加权1 / d,其中d是两点之间的纳税人距离(delta x delta y).
从之前我们有任何细节:
在没有这种信息的情况下,你是否尝试过直线插补?如果您的数据相当密集,这可能会为您做,而且当您需要时,可以很方便地进行代码编写.
下一步通常是三次样条曲线,但是您可能希望获取现有的实现.
当我需要比快速线性插值更强大的东西时,我通常使用ROOT(并选择一个TSpline类),但这可能比您需要更多的开销.
如评论中所指出的,ROOT很大,虽然速度很快,但它确实试图强制你做ROOT的方式,所以它可以对你的程序有很大的影响.
两点(x1,y1)和(x2,y2)之间(或实际外推)的线性插值给出
y_i = (x_i-x1)*(y2-y1)/(x2-x1)