Jes*_*ose 1 python image image-processing
我的软件应判断频谱带,并根据频段的位置,找到频段的峰值点和宽度.
但我需要一种更好的方法来找到投影.
我使用的方法将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()
Run Code Online (Sandbox Code Playgroud)
你想做什么叫做插值.SciPy的有插值模块,与不同的情况下一大堆不同的功能,看看这里,或专门针对图像这里.
这是一个最近提出的问题,其中包含一些示例代码,以及一个显示所发生情况的图表.
但重要的是要意识到插值不会使您的数据更准确,因此在这种情况下它无法帮助您.
如果您想要更准确的结果,则需要更准确的数据.没有其他办法.您需要从更高分辨率的图像开始.(如果您重新取样或插值,结果将不太准确!)
更新 - 问题已经改变
@Hooked提出了一个很好的观点.考虑它的另一种方法是,不是立即平均(这会丢掉数据中的方差),而是可以从光谱图像中的每个水平行生成40个图形(如发布图像中的较低图形),所有这些图表将非常相似,但峰值位置,高度和宽度会有一些变化.您应该计算这40个图像中每个图像中每个峰值的位置,高度和宽度,然后组合这些数据(匹配40个图形中的峰值),并使用适当的方差作为误差估计(峰值位置,高度) ,和宽度),使用中心极限定理.这样您就可以充分利用数据.但是,我相信这是假设谱图中每一行之间有一些独立性,这可能是也可能不是这种情况?