python - Scipy 的 convolve2d 显着增加数组中的值

标签 python opencv numpy scipy

我正在处理图像,一个像素可以具有的最大值是 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

最佳答案

我不是 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 中存在的值。简而言之,没有理由相信卷积会局限于输入值。

二维卷积定义为:

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

关于python - Scipy 的 convolve2d 显着增加数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36755280/

相关文章:

python - 谁能帮我用 python 读取不断更新的视频文件?

c++ - 打开后如何聚焦opencv窗口?

performance - Python 运行速度比 MATLAB 慢

Python Django : RuntimeError: Model class django. contrib.sites.models.Site(错误继续)

python - 通过按换行符拆分列,将 pandas 数据框分解为单独的行

带有任意项目的列表的Python字符串格式化

Python - 绘制 3 维数组

Python列表问题

python - 从过程中排除某些尺寸的图像(OpenCV、Python)

python - 应用时移