ホームページ  >  記事  >  バックエンド開発  >  Golang の画像操作: 画像のしきい値を設定してノイズを除去する方法を学びます

Golang の画像操作: 画像のしきい値を設定してノイズを除去する方法を学びます

王林
王林オリジナル
2023-08-25 10:31:55774ブラウズ

Golang の画像操作: 画像のしきい値を設定してノイズを除去する方法を学びます

Golang 画像操作: 画像のしきい値処理とノイズ除去の方法を学ぶ

はじめに
画像処理とコンピューター ビジョンの分野では、画像のしきい値処理とノイズ除去が一般的です。処理操作。この記事では、Golang を使用して画像のしきい値を設定し、ノイズを除去する方法と、対応するコード例を紹介します。

  1. しきい値
    しきい値は、カラーまたはグレースケール イメージを白黒イメージに変換するための一般的な処理方法です。この方法では、画像ピクセルの輝度値を指定されたしきい値と比較し、ピクセル値を 2 つのカテゴリに分割します。しきい値を超えるピクセルは白、しきい値を下回るピクセルは黒です。

まず、Golang の画像処理パッケージ (github.com/disintegration/imaging) をインストールする必要があります。次のコマンドを使用してインストールします。

go get -u github.com/disintegration/imaging

Next 、画像のしきい値処理を実装するコードを書くことができます:

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.DecodeFunction を使用して、画像。次に、新しいグレースケール画像を作成して、しきい値処理した結果を保存します。次に、画像の各ピクセルを反復処理し、そのグレースケール値を計算し、しきい値に応じてピクセルを黒または白に設定します。最後に、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.jpg として保存します。

概要

この記事では、Golang を使用して画像のしきい値を設定し、ノイズを除去する方法を紹介します。しきい値を使用すると、後続の処理のためにカラーまたはグレースケール イメージを白黒イメージに変換できます。ノイズ除去により、画像内のノイズを低減または除去し、画質を向上させることができます。サンプル コードを通じて、これらの画像処理技術をより深く理解し、適用することができます。この記事が画像処理分野の学習と実践に役立つことを願っています。

以上がGolang の画像操作: 画像のしきい値を設定してノイズを除去する方法を学びますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。