python - 图像投影的更高采样率

标签 python image image-processing

我的软件应该判断谱带,并给定谱带的位置,找到谱带的峰值点和宽度。

enter image description here

我学会了接受 projection of the imagefind width of each peak


但我需要一个更好的方法来找到投影

我使用的方法将 1600 像素宽的图像(例如 1600X40)缩减为 1600 像素长的序列。理想情况下,我想使用相同的图像将图像缩减为 10000 长的序列。

我想要更长的序列,因为 1600 点提供的分辨率太低。单个点对测量值造成较大差异(如果从 18 到 19 判断乐队,则有 4% 的差异)。

如何从同一张图片中得到更长的投影?

我使用的代码:https://stackoverflow.com/a/9771560/604511

import Image
from scipy import *
from scipy.optimize import leastsq

# Load the picture with PIL, process if needed
pic         = asarray(Image.open("band2.png"))

# Average the pixel values along vertical axis
pic_avg     = pic.mean(axis=2)
projection  = pic_avg.sum(axis=0)

# Set the min value to zero for a nice fit
projection /= projection.mean()
projection -= projection.min()

最佳答案

你想做的叫做interpolation . Scipy 有一个 interpolate 模块,针对不同的情况有一大堆不同的函数,看看 here ,或专门用于图像 here .

Here是一个最近提出的问题,其中包含一些示例代码和显示所发生情况的图表。

但真正重要的是要认识到插值不会使您的数据更准确,因此在这种情况下它不会帮助您。

如果您想要更准确的结果,就需要更准确的数据。没有其他办法。您需要从更高分辨率的图像开始。 (如果您重新采样或插值,您的结果实际上会不太准确!)

更新 - 因为问题已经改变

@Hooked 提出了一个很好的观点。另一种思考方式是,您可以从光谱图像中的每个水平行生成 40 个图表(就像您发布的图像中的下图),而不是立即求平均值(这确实会丢弃数据中的方差),所有这些图表将非常相似,但峰值位置、高度和宽度会有一些变化。您应该计算这 40 张图像中每个峰的位置、高度和宽度,然后合并这些数据(匹配 40 个图中的峰),并使用适当的方差作为误差估计(对于峰位置、高度和宽度),通过使用中心极限定理。这样您就可以充分利用您的数据。但是,我相信这是假设频谱图中每一行之间存在某种独立性,情况可能是这样,也可能不是这样?

关于python - 图像投影的更高采样率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11009379/

相关文章:

html - 如何使 <img> 在 div 中居中?

java - 如何创建图像面板并在 NetBeans 上使用它?

c# - 裁剪位图并根据需要扩大尺寸

python - 在 Jupyter 环境中运行 Jupyter Notebook

python - 使用 Nginx+uWsgi+Web.py 的 HTTP 响应中缺少 header

python - 如何在 pandas 数据框中记录 0 值

image - 如何在C++中加载24位Tiff图像

python - 在 python 中将 str.join 与生成器表达式一起使用

html - 如何让代码文本覆盖和图像响应?

python - 检测网格的角