ホームページ バックエンド開発 Golang Golang 画像操作: 画像のヒストグラム均等化とグローバルしきい値処理を実行する方法を学びます

Golang 画像操作: 画像のヒストグラム均等化とグローバルしきい値処理を実行する方法を学びます

Aug 18, 2023 pm 02:49 PM
画像の加工 golang (go) ヒストグラムの等化

Golang 画像操作: 画像のヒストグラム均等化とグローバルしきい値処理を実行する方法を学びます

Golang 画像操作: 画像のヒストグラム均等化とグローバルしきい値処理を実行する方法を学びます

はじめに:
画像処理はコンピューター ビジョンの分野であり、画像処理の分野です。重要なタスクの。実際のアプリケーションでは、多くの場合、画像の品質を向上させたり、画像内の特定の特徴を強調したりするために、いくつかの画像強調操作を実行する必要があります。この記事では、Golang を使用して画像のヒストグラム均等化とグローバルしきい値処理を実行し、画像の強化を実現する方法を紹介します。

1. ヒストグラム イコライゼーション
ヒストグラム イコライゼーションは、一般的に使用される画像強調方法であり、画像ピクセルのグレースケール分布を調整することによって画像のコントラストを強調します。この方法では、まず画像の累積ヒストグラムを計算し、次に累積ヒストグラムに基づいて画像のピクセル値を調整します。

以下は、画像のヒストグラム等化を実装​​するための簡単な Golang コード例です:

package main

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

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

    // 解码图片
    img, _, err := image.Decode(file)
    if err != nil {
        fmt.Println(err)
        return
    }

    // 计算直方图
    hist := histogram(img)

    // 计算累积直方图
    cumHist := cumulativeHistogram(hist)

    // 根据累积直方图对图像进行像素值调整
    newImg := adjustPixels(img, cumHist)

    // 保存处理后的图像
    outFile, err := os.Create("output.jpg")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer outFile.Close()

    // 编码图像
    err = jpeg.Encode(outFile, newImg, &jpeg.Options{Quality: 100})
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println("图像处理完成!")
}

// 计算直方图
func histogram(img image.Image) []int {
    bounds := img.Bounds()
    w, h := bounds.Max.X, bounds.Max.Y
    hist := make([]int, 256)

    for y := 0; y < h; y++ {
        for x := 0; x < w; x++ {
            r, _, _, _ := img.At(x, y).RGBA()
            gray := color.Gray{uint8(r / 256)}
            hist[gray.Y]++
        }
    }

    return hist
}

// 计算累积直方图
func cumulativeHistogram(hist []int) []int {
    cumHist := make([]int, len(hist))
    cumHist[0] = hist[0]

    for i := 1; i < len(hist); i++ {
        cumHist[i] = cumHist[i-1] + hist[i]
    }

    return cumHist
}

// 根据累积直方图调整像素值
func adjustPixels(img image.Image, cumHist []int) image.Image {
    bounds := img.Bounds()
    w, h := bounds.Max.X, bounds.Max.Y
    newImg := image.NewRGBA(bounds)

    for y := 0; y < h; y++ {
        for x := 0; x < w; x++ {
            r, g, b, a := img.At(x, y).RGBA()

            gray := color.Gray{uint8(r / 256)}
            val := uint8(float64(cumHist[gray.Y]) / float64(w*h) * 255)

            newImg.Set(x, y, color.RGBA{val, val, val, uint8(a / 256)})
        }
    }

    return newImg
}
ログイン後にコピー

上記のコードでは、最初に image パッケージ ##Decode# を渡します。 ## 関数は、入力画像ファイルを image.Image 型のオブジェクトにデコードします。次に、histogram 関数を呼び出して画像のヒストグラムを計算し、cumulativeHistogram 関数を呼び出して画像の累積ヒストグラムを計算します。最後に、累積ヒストグラムに基づいて画像のピクセル値を調整し、jpeg パッケージの Encode 関数を使用して、処理された画像をファイルに保存します。 2. グローバルしきい値処理

グローバルしきい値処理は、シンプルですが効果的な画像の 2 値化方法であり、画像のピクセル値を 2 つの重なり合わない滑らかな領域に分割し、それぞれターゲット (オブジェクトと背景) を表します。この方法は通常、前景と背景の違いが明確な画像に適用されます。


以下は、画像のグローバルしきい値処理のための簡単な Golang コード例です:

package main

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

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

    // 解码图片
    img, _, err := image.Decode(file)
    if err != nil {
        fmt.Println(err)
        return
    }

    // 根据全局阈值对图像进行二值化处理
    newImg := binarize(img)

    // 保存处理后的图像
    outFile, err := os.Create("output.jpg")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer outFile.Close()

    // 编码图像
    err = jpeg.Encode(outFile, newImg, &jpeg.Options{Quality: 100})
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println("图像处理完成!")
}

// 根据全局阈值对图像进行二值化处理
func binarize(img image.Image) image.Image {
    bounds := img.Bounds()
    w, h := bounds.Max.X, bounds.Max.Y
    newImg := image.NewRGBA(bounds)

    threshold := calculateThreshold(img)

    for y := 0; y < h; y++ {
        for x := 0; x < w; x++ {
            r, g, b, a := img.At(x, y).RGBA()

            gray := color.Gray{uint8(r / 256)}
            var val uint8
            if gray.Y > threshold {
                val = 255
            } else {
                val = 0
            }

            newImg.Set(x, y, color.RGBA{val, val, val, uint8(a / 256)})
        }
    }

    return newImg
}

// 根据图像的直方图计算全局阈值
func calculateThreshold(img image.Image) uint8 {
    hist := histogram(img)
    totalPixels := img.Bounds().Max.X * img.Bounds().Max.Y

    // 计算背景像素值的总和
    var bgSum, bgCount, fgSum, fgCount int
    for i := 0; i < len(hist); i++ {
        if i <= 128 {
            bgSum += i * hist[i]
            bgCount += hist[i]
        } else {
            fgSum += i * hist[i]
            fgCount += hist[i]
        }
    }

    // 计算背景和前景的平均灰度值
    bgMean := bgSum / bgCount
    fgMean := fgSum / fgCount

    // 根据背景和前景的平均灰度值计算阈值
    return uint8((bgMean + fgMean) / 2)
}

// 计算直方图
func histogram(img image.Image) []int {
    bounds := img.Bounds()
    w, h := bounds.Max.X, bounds.Max.Y
    hist := make([]int, 256)

    for y := 0; y < h; y++ {
        for x := 0; x < w; x++ {
            r, _, _, _ := img.At(x, y).RGBA()
            gray := color.Gray{uint8(r / 256)}
            hist[gray.Y]++
        }
    }

    return hist
}
ログイン後にコピー

上記のコードでは、最初に

image

パッケージの ## を渡します。 Decode 関数は、入力画像ファイルを image.Image 型のオブジェクトにデコードします。次に、calculateThreshold 関数を呼び出して、画像のグローバルしきい値を計算します。最後に、グローバルしきい値に基づいて画像を 2 値化し、jpeg パッケージの Encode 関数を使用して、処理された画像をファイルに保存します。 概要: この記事では、Golang を使用して画像に対してヒストグラム イコライゼーションとグローバルしきい値処理を実行する方法を紹介します。ヒストグラム等化を使用すると、画像のコントラストを向上させ、画像をより鮮明で鮮明にすることができます。また、グローバルしきい値処理を使用して画像をバイナリ イメージに変換し、画像内のターゲット オブジェクトを強調表示することができます。この 2 つの手法を柔軟に使い分けることで、さまざまなアプリケーションのニーズに合わせた画像補正と特徴抽出を実現します。実際のアプリケーションでは、他の画像処理アルゴリズムを組み合わせて、画像処理の効果と品質をさらに向上させることができます。

以上がGolang 画像操作: 画像のヒストグラム均等化とグローバルしきい値処理を実行する方法を学びますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

なぜ Golang が AI 開発に適しているのでしょうか? なぜ Golang が AI 開発に適しているのでしょうか? Sep 08, 2023 pm 01:54 PM

なぜ Golang が AI 開発に適しているのでしょうか?人工知能 (AI) テクノロジーの急速な発展に伴い、AI 分野で Golang プログラミング言語を使用する可能性に注目する開発者や研究者が増えています。 Golang (Go とも呼ばれる) は、Google が開発したオープンソース プログラミング言語で、その高性能、高い同時実行性、シンプルさと使いやすさで開発者に愛されています。この記事では、Golang が AI 開発に適している理由を探り、AI 分野における Golang の利点を示すサンプル コードをいくつか紹介します。ハイセックス

Golang の画像操作: 画像をミラーリング、回転、反転する方法 Golang の画像操作: 画像をミラーリング、回転、反転する方法 Aug 25, 2023 pm 10:31 PM

Golang の画像操作: 画像をミラーリング、回転、反転する方法 1. はじめに 画像処理は、多くの開発シナリオで頻繁に遭遇するニーズの 1 つです。 Golang では、画像パッケージを使用して画像を操作および処理できます。この記事では、Golang を使用して画像をミラーリング、回転、反転する方法に焦点を当て、対応するコード例を示します。 2. ミラーリング操作 画像のミラーリングとは、画像の左右の配置を変更することです。 GolangではdrawパッケージのFliが使えます

PHP画像操作:画像のサイズとファイルサイズを取得する方法 PHP画像操作:画像のサイズとファイルサイズを取得する方法 Aug 26, 2023 am 08:55 AM

PHP 画像の操作: 画像のサイズとファイル サイズを取得する方法 Web サイトやアプリケーションの開発では、画像を処理する必要があることがよくあります。画像のサイズとファイル サイズを取得することは一般的な要件であり、PHP のいくつかの関数を使用して簡単に実現できます。この記事では、PHPを使って画像のサイズやファイルサイズを取得する方法をコード例を添えて紹介します。画像サイズの取得 画像サイズを取得するには、PHP の組み込み関数 getimagesize() を使用できます。この関数は画像サイズを含むファイルを返します。

Golang 画像操作: 画像のグラデーションとテクスチャ マッピングを実行する方法 Golang 画像操作: 画像のグラデーションとテクスチャ マッピングを実行する方法 Aug 22, 2023 pm 12:33 PM

Golang 画像操作: 画像上でグラデーション マッピングとテクスチャ マッピングを実行する方法 概要: 画像処理では、グラデーション マッピングとテクスチャ マッピングの 2 つが一般的に使用される手法です。グラデーションはカラー効果の滑らかな遷移を作成でき、テクスチャ マッピングはテクスチャ イメージをターゲット イメージにマッピングできます。この記事では、Golang プログラミング言語を使用して画像に対してグラデーションおよびテクスチャ マッピング操作を実行する方法を紹介します。画像のグラデーション まず、Golang の画像処理パッケージ image と image/color をインポートする必要があります。以下は、によって作成されたサンプルコードです。

Golang 開発: 分散ファイル ストレージ システムの構築 Golang 開発: 分散ファイル ストレージ システムの構築 Sep 22, 2023 am 08:00 AM

Golang 開発: 分散ファイル ストレージ システムの構築 近年、クラウド コンピューティングとビッグ データの急速な発展に伴い、データ ストレージの需要が増加し続けています。この傾向に対処するために、分散ファイル ストレージ システムが重要な技術的方向性になっています。この記事では、Golang プログラミング言語を使用して分散ファイル ストレージ システムを構築する方法を紹介し、具体的なコード例を示します。 1. 分散ファイルストレージシステムの設計 分散ファイルストレージシステムとは、ファイルデータを複数のブロックに分けて複数のマシンに分散して格納するシステムです。

Golang の画像操作: 明るさとコントラストを調整する方法 Golang の画像操作: 明るさとコントラストを調整する方法 Aug 19, 2023 pm 04:53 PM

Golang 画像操作: 明るさとコントラストを調整する方法 はじめに: 画像処理において、画像の明るさとコントラストを調整することは非常に一般的なタスクです。明るさを調整することで、画像を明るくしたり暗くしたりできます。また、コントラストを調整することで、画像内の色の違いを増減できます。この記事では、Golang を使用して画像の明るさとコントラストを調整する方法とコード例を紹介します。必要なパッケージをインポートする まず、画像の読み取りと保存を処理するために、画像とカラーのパッケージをインポートする必要があります。

Golang 画像操作: 画像のカラーバランスと色変換を実行する方法 Golang 画像操作: 画像のカラーバランスと色変換を実行する方法 Aug 19, 2023 am 09:21 AM

Golang の画像操作: 画像のカラー バランスと色変換を実行する方法 はじめに: 画像処理の分野では、カラー バランスと色変換は一般的に使用される操作の 1 つです。この記事では、Go 言語を使用して画像のカラー バランスと色変換を実行する方法と、対応するコード例を紹介します。 1. カラー バランス カラー バランスとは、画像全体の色をより均一で自然にするために、画像内の各カラー チャネルの強度を調整することを指します。一般的に使用されるカラー バランス アルゴリズムには、輝度バランス、ホワイト バランス、ヒストグラム イコライゼーションが含まれます。明るさバランスグラフを調整することで明るさバランスを実現します

Golang 同時プログラミング実践におけるゴルーチンのアプリケーション シナリオの分析 Golang 同時プログラミング実践におけるゴルーチンのアプリケーション シナリオの分析 Jul 18, 2023 pm 05:21 PM

Golang 同時プログラミング実践におけるゴルーチンのアプリケーション シナリオ分析の紹介: コンピューターのパフォーマンスの継続的な向上に伴い、マルチコア プロセッサーが主流になってきました。マルチスレッド操作を実装するためのプログラミング技術。 Go 言語のゴルーチン (コルーチン) は、効率的な同時操作を実現するために使用できる非常に強力な同時プログラミング メカニズムです。この記事では、ゴルーチンのアプリケーション シナリオを調査し、いくつかの例を示します。

See all articles