【问题标题】:Scipy's convolve2d increasing the values in array significantlyScipy 的 convolve2d 显着增加了数组中的值
【发布时间】:2016-08-13 19:25:36
【问题描述】:

我正在处理图像,一个像素可以具有的最大值是 255,但是在旋转图像后进行卷积时,该值急剧增加,达到 1000 秒,因此给了我一个白色的图像。这背后的原因是什么?

代码如下:

        h.extend([scipy.misc.imrotate(h[0], 15*i, 'bicubic') for i in range(1, 12)])
        h = np.asarray(h)
        print h.shape
        R = []
        for i in range(0, 12):
            R.append(scipy.signal.convolve2d(self.img,  h[i], mode = 'same'))
        R = np.asarray(R)
        rt = np.zeros(self.img.shape)
        x, y = self.img.shape
        print (x,y)
        for i in range(0, x):
            for j in range(0, y):
                for k in range(0, 12):
                    if k == 0:
                        max_er = R[k][i, j]
                        #print max_er
                    if(R[k][i, j]>max_er):
                        max_er = R[k][i, j]
                rt[i, j] = max_er

【问题讨论】:

  • 要清楚,你是说 1000 是在 rt 数组中吗?
  • R 数组中也是如此。
  • 嗯,你可以将图像缩放回 256,但我首先想到的是卷积核没有归一化,也就是说它的积分不是 1。
  • 如何标准化?
  • 归一化这个意思是你找到所有元素的总和然后将每个元素除以总和,所以现在总和=1。

标签: python opencv numpy scipy


【解决方案1】:

我不是 2D 卷积方面的专家,但我会解释 1D 卷积,希望您能了解它与 2D 卷积的关系。卷积定义如下(对于离散序列):

(f*g)[n] = sum over all i f[i] * g[n-i]

fg 需要有紧凑的支持(即没有非零值到无穷大)。以 f 和 g 为例:

f = 1,1,1,1
g = 1,1,1,1
f*g = 1,2,3,4,3,2,1

如您所见,fg 的卷积产生的值大于任一序列的输入值。大致可以认为a+ba*b 可能导致值大于ab 中存在的值。简而言之,没有理由相信卷积会仅限于输入值。

2D卷积定义为:

(f*g)[m,n] = sum over all j sum over all i f[i,j] * g[m-i,n-j]

【讨论】:

    【解决方案2】:

    您可以使用名为:astropy 的库。您有很多功能可以进行卷积等..您可以处理图像/数据表等...

    【讨论】:

      猜你喜欢
      • 2017-03-07
      • 2022-09-29
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      • 2019-07-10
      • 1970-01-01
      • 2021-06-06
      相关资源
      最近更新 更多