Golang 画像操作: 画像のしきい値処理とノイズ除去の方法を学ぶ
はじめに
画像処理とコンピューター ビジョンの分野では、画像のしきい値処理とノイズ除去が一般的です。処理操作。この記事では、Golang を使用して画像のしきい値を設定し、ノイズを除去する方法と、対応するコード例を紹介します。
まず、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.Decode
Function を使用して、画像。次に、新しいグレースケール画像を作成して、しきい値処理した結果を保存します。次に、画像の各ピクセルを反復処理し、そのグレースケール値を計算し、しきい値に応じてピクセルを黒または白に設定します。最後に、jpeg.Encode
関数を使用して、結果を output.jpg
として保存します。
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 サイトの他の関連記事を参照してください。