Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 哥朗卷积_Image Processing_Go_Convolution - Fatal编程技术网

Image processing 哥朗卷积

Image processing 哥朗卷积,image-processing,go,convolution,Image Processing,Go,Convolution,我想在图像上执行卷积 原始图像为: 所以我用gimp测试卷积。使用此矩阵: 11 11 11 和分隔符9 我得到 当我执行我的算法时,我得到: 我的算法是: func Convolution(img *image.Image, matrice [][]int) *image.NRGBA { imageRGBA := image.NewNRGBA((*img).Bounds()) w := (*img).Bounds().Dx() h := (*img).Bounds

我想在图像上执行卷积

原始图像为:

所以我用gimp测试卷积。使用此矩阵:

11

11

11

和分隔符9

我得到

当我执行我的算法时,我得到:

我的算法是:

func Convolution(img *image.Image, matrice [][]int) *image.NRGBA {
    imageRGBA := image.NewNRGBA((*img).Bounds())
    w := (*img).Bounds().Dx()
    h := (*img).Bounds().Dy()
    sumR := 0
    sumB := 0
    sumG := 0
    var r uint32
    var g uint32
    var b uint32
    for y := 0; y < h; y++ {
        for x := 0; x < w; x++ {

            for i := -1; i <= 1; i++ {
                for j := -1; j <= 1; j++ {

                    var imageX int
                    var imageY int

                    imageX = x + i
                    imageY = y + j

                    r, g, b, _ = (*img).At(imageX, imageY).RGBA()
                    sumG = (sumG + (int(g) * matrice[i+1][j+1]))
                    sumR = (sumR + (int(r) * matrice[i+1][j+1]))
                    sumB = (sumB + (int(b) * matrice[i+1][j+1]))
                }
            }

            imageRGBA.Set(x, y, color.NRGBA{
                uint8(min(sumR/9, 255)),
                uint8(min(sumG/9, 255)),
                uint8(min(sumB/9, 255)),
                255,
            })

            sumR = 0
            sumB = 0
            sumG = 0

        }
    }

    return imageRGBA

}
func卷积(img*image.image,矩阵[][]int)*image.NRGBA{
imageRGBA:=image.NewNRGBA((*img.Bounds())
w:=(*img.Bounds().Dx()
h:=(*img.Bounds().Dy())
sumR:=0
sumB:=0
总和:=0
var uint32
变量g uint32
var b uint32
对于y:=0;y对于i:=-1;i
r
g
b
uint32
值,它们包含16位颜色信息,如果以非零8位值开始,则始终大于255位

然后,您不能对RGBA值进行运算并将其截断为
uint8
;这会产生无用的结果,因为最低有效位只是8位值的小数部分

将候选整数值与最大16位值65535进行比较,并在截断前将其移位8位,以获得8个最高有效位

uint8(min(sumR/9, 0xffff) >> 8),
uint8(min(sumG/9, 0xffff) >> 8),
uint8(min(sumB/9, 0xffff) >> 8),

r
g
b
uint32
值,它们包含16位颜色信息,如果作为非零8位值启动,则颜色信息始终大于255位

然后,您不能对RGBA值进行运算并将其截断为
uint8
;这会产生无用的结果,因为最低有效位只是8位值的小数部分

将候选整数值与最大16位值65535进行比较,并在截断前将其移位8位,以获得8个最高有效位

uint8(min(sumR/9, 0xffff) >> 8),
uint8(min(sumG/9, 0xffff) >> 8),
uint8(min(sumB/9, 0xffff) >> 8),