首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高斯模糊图像处理矩阵乘法

高斯模糊图像处理矩阵乘法
EN

Stack Overflow用户
提问于 2022-04-18 17:56:11
回答 1查看 76关注 0票数 -1

我试图在python中实现图像过滤器,比如Gausian。

当我试图优化代码以允许5×5内核时,我遇到了一个问题。

我的目标是允许将任何nxn Gausian核应用于图像。

目前的执行情况

代码语言:javascript
复制
def gaussianOperator(roi, kernel):
    container = np.copy(roi)
    size = container.shape

    for i in range(size[0] - 2):
        for j in range(size[1] - 2):
            container[i+1][j+1] = np.sum(roi[i:i + 5, j:j + 5].dot(kernel))
            # container[i+1][j+1] = g                                      
            
    return container  

在尝试允许n×n核之后,我目前遇到的错误是:

形状(5,4)和(5,5)不对齐:4 (dim 1) != 5 (dim 0)

我计算和积的线过去是这样的:

代码语言:javascript
复制
 gx = roi[i - 1][j - 1] * kX[0][0] + roi[i][j - 1] * kX[0][2] + roi[i + 1][j - 1] * kX[1][0] + roi[i - 1][j + 1] * kX[1][2] + roi[i][j + 1] * kX[2][0] + roi[i + 1][j + 1] * kX[2][2] 

这段代码在3×3内核上工作得很好。

创建内核的函数如下:

代码语言:javascript
复制
def gkern(l=5, sig=1.):
    
    ax = np.linspace(-(l - 1) / 2., (l - 1) / 2., l)
    gauss = np.exp(-0.5 * np.square(ax) / np.square(sig))
    kernel = np.outer(gauss, gauss)
    
    return kernel / np.sum(kernel)

如何修改代码?

EN

回答 1

Stack Overflow用户

发布于 2022-04-18 22:28:17

模拟您的大小为3的内核案例:

代码语言:javascript
复制
In [174]: roi = np.arange(10)
     ...: for i in range(roi.shape[0]-2):
     ...:     x = roi[i:i+3]
     ...:     print(x.shape, x)
     ...: 
     ...: 
(3,) [0 1 2]
(3,) [1 2 3]
(3,) [2 3 4]
(3,) [3 4 5]
(3,) [4 5 6]
(3,) [5 6 7]
(3,) [6 7 8]
(3,) [7 8 9]

现在5码:

代码语言:javascript
复制
In [175]: roi = np.arange(10)
     ...: for i in range(roi.shape[0]-2):
     ...:     x = roi[i:i+5]
     ...:     print(x.shape, x)
     ...: 
(5,) [0 1 2 3 4]
(5,) [1 2 3 4 5]
(5,) [2 3 4 5 6]
(5,) [3 4 5 6 7]
(5,) [4 5 6 7 8]
(5,) [5 6 7 8 9]
(4,) [6 7 8 9]
(3,) [7 8 9]

哦,x在以后的迭代中太短了。

调整范围

代码语言:javascript
复制
In [176]: roi = np.arange(10)
     ...: for i in range(roi.shape[0]-4):
     ...:     x = roi[i:i+5]
     ...:     print(x.shape, x)
     ...: 
(5,) [0 1 2 3 4]
(5,) [1 2 3 4 5]
(5,) [2 3 4 5 6]
(5,) [3 4 5 6 7]
(5,) [4 5 6 7 8]
(5,) [5 6 7 8 9]

我让你把这个推广到2d。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71915308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档