Maison  >  Article  >  développement back-end  >  Manipulation d'images Golang : apprenez à seuiller et débruiter les images

Manipulation d'images Golang : apprenez à seuiller et débruiter les images

王林
王林original
2023-08-25 10:31:55726parcourir

Manipulation dimages Golang : apprenez à seuiller et débruiter les images

Opération d'image Golang : Apprenez à seuiller et débruiter les images

Introduction
Dans les domaines du traitement d'image et de la vision par ordinateur, le seuillage et le débruitage sont des opérations de traitement d'image courantes. Cet article expliquera comment utiliser Golang pour seuiller et débruiter les images, et fournira des exemples de code correspondants.

  1. Seuil
    Le seuil est une méthode de traitement courante pour convertir une image en couleur ou en niveaux de gris en une image en noir et blanc. Cette méthode compare la valeur de luminosité des pixels de l'image avec un seuil donné et divise les valeurs de pixels en deux catégories : les pixels au-dessus du seuil sont blancs et les pixels en dessous du seuil sont noirs.

Tout d'abord, nous devons installer le package de traitement d'image de Golang - github.com/disintegration/imaging, installez-le via la commande suivante : github.com/disintegration/imaging,通过以下命令进行安装:

go get -u github.com/disintegration/imaging

接下来,我们可以编写代码来实现图像的阈值化处理:

package main

import (
    "image"
    "image/color"
    "image/jpeg"
    "log"
    "os"

    "github.com/disintegration/imaging"
)

func main() {
    // 打开图像文件
    file, err := os.Open("input.jpg")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    // 解码图像
    img, err := jpeg.Decode(file)
    if err != nil {
        log.Fatal(err)
    }

    // 阈值化处理
    threshold := 128
    bounds := img.Bounds()
    grayImage := image.NewGray(bounds)

    for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
        for x := bounds.Min.X; x < bounds.Max.X; x++ {
            originalColor := img.At(x, y)
            red, green, blue, _ := originalColor.RGBA()
            grayValue := (int(red) + int(green) + int(blue)) / 3

            var colorValue uint8
            if grayValue > threshold {
                colorValue = 255
            } else {
                colorValue = 0
            }

            grayImage.Set(x, y, color.Gray{colorValue})
        }
    }

    // 保存阈值化后的图像
    outputFile, err := os.Create("output.jpg")
    if err != nil {
        log.Fatal(err)
    }
    defer outputFile.Close()

    jpeg.Encode(outputFile, grayImage, nil)
}

上述代码首先打开了名为input.jpg的图像文件,并使用jpeg.Decode函数对图像进行解码。然后,我们创建了一个新的灰度图像用于保存阈值化处理后的结果。接下来,我们遍历图像的每个像素,计算其灰度值,并根据阈值的设定将像素设置为黑色或白色。最后,我们使用jpeg.Encode函数将结果保存为output.jpg

  1. 去噪
    图像去噪是指在图像处理过程中,通过一定的算法和技术,将图像中的噪声减小或消除的过程。常见的图像去噪算法有中值滤波、高斯滤波等。

我们可以使用Golang的draw包来实现简单的中值滤波算法:

package main

import (
    "image"
    "image/color"
    "image/jpeg"
    "log"
    "os"
)

func medianFilter(img image.Image, size int) image.Image {
    bounds := img.Bounds()
    result := image.NewRGBA(bounds)

    for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
        for x := bounds.Min.X; x < bounds.Max.X; x++ {
            mr, mg, mb := 0, 0, 0
            count := 0

            for dy := -size; dy <= size; dy++ {
                for dx := -size; dx <= size; dx++ {
                    nx := x + dx
                    ny := y + dy

                    if nx >= bounds.Min.X && nx < bounds.Max.X && ny >= bounds.Min.Y && ny < bounds.Max.Y {
                        r, g, b, _ := img.At(nx, ny).RGBA()
                        mr += int(r)
                        mg += int(g)
                        mb += int(b)
                        count++
                    }
                }
            }

            rr := uint8(mr / count)
            gg := uint8(mg / count)
            bb := uint8(mb / count)

            result.Set(x, y, color.RGBA{rr, gg, bb, 255})
        }
    }

    return result
}

func main() {
    // 打开图像文件
    file, err := os.Open("input.jpg")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    // 解码图像
    img, err := jpeg.Decode(file)
    if err != nil {
        log.Fatal(err)
    }

    // 中值滤波处理
    filtered := medianFilter(img, 1)

    // 保存去噪后的图像
    outputFile, err := os.Create("output.jpg")
    if err != nil {
        log.Fatal(err)
    }
    defer outputFile.Close()

    jpeg.Encode(outputFile, filtered, nil)
}

上述代码中,我们定义了一个medianFilter函数来实现简单的中值滤波算法。函数中,我们使用一个size参数来指定滤波窗口的大小。我们遍历图像的每个像素,并根据窗口内的像素计算该像素的中值,并将结果保存到新创建的图像中。最后,我们使用jpeg.Encode函数将结果保存为output.jpgrrreee

Ensuite, nous pouvons écrire du code pour implémenter le seuil d'image :

rrreee
Le code ci-dessus ouvre d'abord un fichier image nommé input.jpg et utilise la fonction jpeg.Decode pour décoder l'image. Ensuite, nous créons une nouvelle image en niveaux de gris pour enregistrer le résultat seuillé. Ensuite, nous parcourons chaque pixel de l'image, calculons sa valeur en niveaux de gris et définissons le pixel sur noir ou blanc en fonction du seuil. Enfin, nous utilisons la fonction jpeg.Encode pour enregistrer le résultat sous output.jpg.

    🎜Débruitage🎜Le débruitage d'image fait référence au processus de réduction ou d'élimination du bruit dans les images grâce à certains algorithmes et techniques lors du traitement de l'image. Les algorithmes courants de débruitage d'image incluent le filtrage médian, le filtrage gaussien, etc. 🎜🎜🎜Nous pouvons utiliser le package draw de Golang pour implémenter un algorithme de filtrage médian simple : 🎜rrreee🎜Dans le code ci-dessus, nous définissons une fonction medianFilter pour implémenter un simple filtre médian algorithme. Dans la fonction, nous utilisons un paramètre size pour spécifier la taille de la fenêtre de filtre. Nous parcourons chaque pixel de l'image et calculons la valeur médiane de ce pixel en fonction des pixels dans la fenêtre et enregistrons le résultat dans l'image nouvellement créée. Enfin, nous utilisons la fonction jpeg.Encode pour enregistrer le résultat sous output.jpg. 🎜🎜Résumé🎜Cet article explique comment utiliser Golang pour seuiller et débruiter les images. Le seuillage peut convertir des images couleur ou en niveaux de gris en images noir et blanc pour un traitement ultérieur. Le débruitage peut réduire ou éliminer le bruit dans les images et améliorer la qualité de l'image. Grâce à des exemples de code, nous pouvons mieux comprendre et appliquer ces techniques de traitement d'image. J'espère que cet article pourra être utile pour votre étude et votre pratique dans le domaine du traitement d'images. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn