如何基于类扫雷密度图估算分子初始位置?
基于密度图的分子位置初始估计(数学方法)
我需要从测量数据提取的密度图中,得到分子位置的初始估计(作为后续优化的起点)。密度图的每个像素值代表该像素一定半径内贡献测量数据的分子数量(例如值为3表示该区域内有3个分子)。
关键约束
- 图像中的总分子数可准确估算,视为已知参数
- 所有分子会留下直径约±4像素的圆形足迹,直径存在小幅波动
- 密度图存在噪声
- 分子可位于像素内任意位置
示例场景
15×15网格(像素大小166.25,图像尺寸2493.75×2493.75)包含16个分子,对应的密度图和真实位置如下:
密度图
import numpy as np np.array([ [0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 2, 2, 1, 2, 0, 0, 0, 2, 3, 3, 0], [0, 0, 1, 1, 1, 2, 3, 3, 3, 0, 3, 2, 3, 3, 3], [0, 0, 0, 3, 3, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4], [0, 0, 3, 3, 3, 3, 2, 3, 4, 4, 5, 4, 4, 4, 3], [0, 0, 2, 2, 2, 3, 3, 3, 4, 3, 4, 4, 5, 4, 4], [0, 0, 2, 2, 2, 3, 4, 3, 3, 2, 3, 4, 4, 4, 3], [0, 0, 1, 2, 2, 3, 3, 3, 3, 2, 3, 4, 3, 5, 4], [0, 0, 0, 0, 2, 2, 2, 2, 2, 3, 0, 2, 2, 3, 0], [0, 0, 0, 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0] ])
真实位置
np.array([ [1413.316, 2129.608], [1609.36, 1025.322], [1167.155, 2048.27 ], [ 779.355, 1960.638], [1086.153, 617.528], [1102.6, 2236.773], [1389.079, 1318.307], [ 688.23, 2181.688], [ 646.378, 2009.764], [ 301.399, 1075.606], [ 872.145, 1286.817], [ 920.3, 1177.433], [ 482.789, 622.468], [1233.384, 676.559], [1216.433, 1594.56 ], [2339.047, 2068.726] ])
已尝试方法
- 用系统脉冲响应函数反卷积,结果为纯噪声
- 反向操作:按密度图像素值绘制圆形并叠加,未得到有效峰值
- K-means聚类:在值为n的像素内随机生成n个点,以分子总数为聚类中心数进行聚类,多次重复选最优结果,但效果仍不理想
项目倾向于使用数学方法实现,而非机器学习,寻求技术解决方案。
内容的提问来源于stack exchange,提问作者chipmunk
相关产品推荐
相关产品推荐

