多项式变换实现图像水平扭曲:特征错位与空白问题求解
大纲
我需要对时间序列光谱峰图像执行扭曲操作,具体方案为:基于与图像关联的各时间步峰「质心」数据生成多项式,再对该多项式进行增强,原始多项式与增强后多项式分别作为源点和目标点,调用skimage.transform.warp()完成图像扭曲。
本次扭曲的目标是生成两张扭曲图像,两张图像间呈正相关;若将其中一张水平翻转,则二者呈负相关。
可参考输出示例图(标注为简单图像对比)。
(注:多项式增强逻辑为:在每个多项式峰/谷位置添加与该点像素幅值成比例的噪声(可加可减),再基于这些增强点生成同阶新多项式,同时添加固定点避免增强后多项式倒置。)
代码片段
我通过创建GeometricTransform对象,将其作为inverse_map传入warp()实现上述逻辑,代码如下:
from skimage import transform # 创建变换对象,注意源点和目标点(N,2)数组顺序反转 # 因为没有显式实现逆多项式变换的方法 t = transform.estimate_transform('polynomial', src=destination, dst=source, order=4) # order = 多项式次数 - 1 # 使用变换对象扭曲原始图像 warped_image = transform.warp(image, t, order=0, mode='constant', cval=float('nan'))
遇到的问题
当前扭曲结果存在两个核心问题:
- 图像扭曲后存在空白区域,我了解可将
transform.warp()的mode参数从'constant'改为'reflect'解决,但该操作会重复已有数据,与第二个问题冲突。 - 假设我的扭曲实现逻辑正确,当前操作将时间步60处的锯齿特征偏移到了约50的位置(红圈标注)。我的扭曲目标仅为对图像做水平扭曲,所有特征需保留在原时间步范围内(允许极小幅度偏移),仅调整其x轴像素位置。因此我也无法使用
'reflect'等填充模式,这类模式会人为新增数据,对后续扭曲图像对的相关性比对流程造成干扰。
已尝试的解决方案
- 参考相关问答使用RANSAC方法鲁棒估计多项式几何变换,期望缩小空白区域后更换填充模式,但效果与原方案基本一致,未解决任何问题。
- 基于
cv2实现分段仿射变换与Delaunay三角剖分,该方案可保留原始图像尺寸、无重复数据,且y轴偏移极小,解决了上述两个问题,但扭曲效果几乎不可察觉,不确定是否可通过增加三角面片数量、拉大源点与目标点间距的方式优化,该方向的问题后续可能单独发帖咨询。
总结
我需要基于多项式变换实现图像水平扭曲的可行方案,也欢迎推荐其他适用的变换方法,核心要求是尽可能保留所有特征在原始时间步范围内。
感谢您的解答。
补充
配套共享目录包含运行示例所需的.py文件与测试数据。
内容的提问来源于stack exchange,提问作者AlexP
相关产品推荐
相关产品推荐

