确定对象和它的反射之间的距离

问题描述 投票:2回答:2

我想测量物体和它的倒影之间的距离。上部“线”是反射。下层是对象本身。目的是一种螺旋形,这进一步加剧了对象上的视图。光,是在对象上抛出仅反映部分,并使它看起来好像对象将改变其大小。光在慢动作相机产生(5000张图像/秒),抛出的物体上以使其可见。该目的是永久地移动(所有轴)。我试图从这些图像分析其运动。

的图像是超级低分辨率(15x20像素)。我申请谷歌RAISR AI放大的图像,并提高其质量。此外,我应用了罗嗦过滤器,以帮助与opencv使得轮廓。在我申请的轮廓年底,为纪念相关区域可见。

改进前:

enter image description here

改进+轮廓后:

enter image description here

这种特定的图片是好的之一。问题是,他们大多是这样的:

enter image description here enter image description here enter image description here enter image description here

有一个人在那里,有一个想法,我将如何衡量对象及其反射之间的距离?

我最后的方法没有产生令人满意的结果。在我会使物体上面休息。问题是,该对象(反射照明到相机)改变其大小。

enter image description here enter image description here enter image description here

我怎么会做这样的事?

enter image description here

我有这么好的老板。我不想告诉他,我解决不了这个问题。帮助深表感谢。

python opencv scipy scikit-image
2个回答
0
投票

看来你的主要问题是分辨率低。在我看来,这RAISR AI是一个单帧超分辨率的方法。

你有一个慢动作摄像机,所以也许你比你需要更多的图像。然后,你可以使用多帧的办法,如opencv super resolution

对于多帧的办法,你获得更多的真实信息。单帧方法只是估计的更多信息。

你标记这个问题:一个问题可能是,该超分辨率不是OpenCV的Python版本的一部分。因此,也许你需要ctypes或其他包装解决方案一种解决方法。


0
投票

基于2-d相关技术用于识别和定位对象和思考提供了丰富的功能集。

下面是一个示例代码,演示了如何工作的。我们期待为反射通过翻转图像,并在下面,我们用卷()来说明位移坐标系中是如何工作的。然后,将2-d的相关性给你的两个输入如何排队如相对于其它移动一个的函数的度量。 (尝试用1-d试验数据如果它可以帮助您更轻松地获得它是如何工作的感觉。没有什么关于这个不同在2-d除了维数)。

下面我们就一毛的方法和使用整个图像。由于我们与傅里叶变换工作,这是好的。然而,你有时可以提高性能,如果你能识别并切除了一块图像与作为基准的工作。

也有涉及投影到(理想)正交基组,小波等,这些方法效果最好,当基组是你想找到的东西一个很好的匹配技术。基于傅立叶变换的方法很好地工作,只要你是好奈奎斯特范围内,满足基本的SNR考虑。但平心而论,在FT也处于基组的扩大。

最后,应该指出的是,没有任何技术,可以创建新的信息。如果它不存在输入,没有算法,没有代码的数量会发现它。

好吧,这里是示例代码演示的相关性。

#!/usr/bin/python

import numpy as np
import matplotlib.pylab as plt
from scipy.signal import correlate2d

plt.figure( figsize=[6,8] )

im = plt.imread("temp.png")

# For simplicity of exposition, we just sum the three color channels.
im1 = np.sum(im,axis=2)

ny = 5
nx = 2

n1 = 1
ax = plt.subplot( ny, nx, n1 )
ax.imshow(  im1 )
ax.set_title( 'raw' )
ax.set_aspect( 'equal' )

corr = correlate2d( im1, im1, boundary='symm', mode='same')

n1 += 1
ax = plt.subplot( ny, nx, n1 )
ax.contourf(  corr, 20 )
ax.set_title( 'auto-correlation' )
ax.set_aspect( 'equal' )


for a in 0, 1:
    imtest = np.roll(im1,4,axis=a)
    corr = correlate2d( im1, imtest, boundary='symm', mode='same')

    n1 += 1
    ax = plt.subplot( ny, nx, n1 )
    ax.imshow( imtest )
    ax.set_title( 'roll axis %d'%a )

    n1 += 1
    ax = plt.subplot( ny, nx, n1 )
    ax.contourf(  corr, 20 )
    ax.set_title( 'correlation, roll axis %d'%a )
    ax.set_aspect( 'equal' )

    imtest = np.flip(im1,axis=a)
    corr = correlate2d( im1, imtest, boundary='symm', mode='same')

    n1 += 1
    ax = plt.subplot( ny, nx, n1 )
    ax.imshow( imtest )
    ax.set_title( 'flip axis %d'%a )

    n1 += 1
    ax = plt.subplot( ny, nx, n1 )
    ax.contourf(  corr, 20 )
    ax.set_title( 'correlation, flip axis %d'%a )
    ax.set_aspect( 'equal' )

plt.tight_layout()
plt.show()

下面是使用你的原始图像的输出。请注意,其中的局部最大值发生在相关性,对于自相关和用于辊和翻转。

Output from the sample code

看到这里的底部列出的例子:scipy.signal.correlate2d

© www.soinside.com 2019 - 2024. All rights reserved.