Rumah >pembangunan bahagian belakang >Golang >Pemprosesan imej Golang: cara mewarna imbangan dan penyamaan histogram gambar

Pemprosesan imej Golang: cara mewarna imbangan dan penyamaan histogram gambar

王林
王林asal
2023-08-20 16:21:371493semak imbas

Pemprosesan imej Golang: cara mewarna imbangan dan penyamaan histogram gambar

Pemprosesan imej Golang: Cara melakukan imbangan warna dan penyamaan histogram gambar

Pengenalan:
Dalam bidang pemprosesan imej, imbangan warna dan penyamaan histogram adalah dua teknik yang biasa digunakan. Pengimbangan warna digunakan untuk melaraskan taburan warna dalam imej untuk rupa yang lebih semula jadi, manakala penyamaan histogram digunakan untuk meningkatkan kontras dan taburan kecerahan imej. Artikel ini akan memperkenalkan cara menggunakan Golang untuk melaksanakan keseimbangan warna dan penyamaan histogram imej, dan memberikan contoh kod yang sepadan.

  1. Imbangan Warna
    Imbangan warna boleh dicapai dengan melaraskan saluran RGB imej. Secara khusus, kita boleh mencapai keseimbangan warna dengan mengubah suai taburan warna imej untuk menjadikannya lebih seragam.

Berikut ialah contoh kod untuk pengimbangan warna imej menggunakan Golang:

// 导入所需的包
import (
    "image"
    "image/color"
    "math"
)

// 颜色平衡函数
func balanceColors(img image.Image) image.Image {
    bounds := img.Bounds()
    width, height := bounds.Max.X, bounds.Max.Y

    // 创建一个新的RGBA图像
    balancedImg := image.NewRGBA(image.Rect(0, 0, width, height))

    rTotal, gTotal, bTotal := 0, 0, 0
    numPixels := width * height

    // 遍历图像的每一个像素
    for y := 0; y < height; y++ {
        for x := 0; x < width; x++ {
            // 获取像素的RGB值
            r, g, b, _ := img.At(x, y).RGBA()

            // 累加RGB值
            rTotal += int(r >> 8)
            gTotal += int(g >> 8)
            bTotal += int(b >> 8)
        }
    }

    // 计算平均RGB值
    rAvg := float64(rTotal) / float64(numPixels)
    gAvg := float64(gTotal) / float64(numPixels)
    bAvg := float64(bTotal) / float64(numPixels)

    // 遍历图像的每一个像素
    for y := 0; y < height; y++ {
        for x := 0; x < width; x++ {
            // 获取像素的RGB值
            r, g, b, a := img.At(x, y).RGBA()

            // 计算调整后的RGB值
            rBalanced := uint8(math.Min(float64(r>>8)*(rAvg/255), 255))
            gBalanced := uint8(math.Min(float64(g>>8)*(gAvg/255), 255))
            bBalanced := uint8(math.Min(float64(b>>8)*(bAvg/255), 255))

            // 设置新图像的像素值
            balancedImg.Set(x, y, color.RGBA{rBalanced, gBalanced, bBalanced, uint8(a>>8)})
        }
    }

    return balancedImg
}
  1. Penyamaan histogram
    Penyamaan histogram ialah teknik yang mengagihkan semula nilai piksel imej untuk meningkatkan kontras dan kecerahan imej. Ia boleh dicapai dengan statistik dan penukaran nilai kelabu imej.

Berikut ialah contoh kod penggunaan Golang untuk penyamaan histogram imej:

// 导入所需的包
import (
    "image"
    "image/color"
    "math"
)

// 直方图均衡化函数
func equalizeHistogram(img image.Image) image.Image {
    bounds := img.Bounds()
    width, height := bounds.Max.X, bounds.Max.Y

    // 创建一个新的RGBA图像
    equalizedImg := image.NewRGBA(image.Rect(0, 0, width, height))

    // 计算像素值的累计分布
    var hist [256]int
    for y := 0; y < height; y++ {
        for x := 0; x < width; x++ {
            // 获取像素的灰度值
            r, g, b, _ := img.At(x, y).RGBA()
            gray := color.GrayModel.Convert(color.RGBA{uint8(r>>8), uint8(g>>8), uint8(b>>8), 0}).(color.Gray)

            // 累加灰度值分布
            hist[gray.Y]++
        }
    }

    // 计算像素值的累积直方图
    var cumHist [256]int
    cumHist[0] = hist[0]
    for i := 1; i < 256; i++ {
        cumHist[i] = cumHist[i-1] + hist[i]
    }

    // 计算像素值的映射关系
    var mapping [256]uint8
    for i := 0; i < 256; i++ {
        mapping[i] = uint8(math.Round(float64(cumHist[i]) * 255 / float64(width*height)))
    }

    // 遍历图像的每一个像素
    for y := 0; y < height; y++ {
        for x := 0; x < width; x++ {
            // 获取像素的灰度值
            r, g, b, a := img.At(x, y).RGBA()
            gray := color.GrayModel.Convert(color.RGBA{uint8(r>>8), uint8(g>>8), uint8(b>>8), uint8(a>>8)}).(color.Gray)

            // 获取映射后的灰度值
            newGray := mapping[gray.Y]

            // 设置新图像的像素值
            equalizedColor := color.Gray{newGray}
            equalizedImg.Set(x, y, equalizedColor)
        }
    }

    return equalizedImg
}

Kesimpulan:
Artikel ini memperkenalkan cara menggunakan Golang untuk pengimbangan warna imej dan penyamaan histogram, dan menyediakan contoh kod yang sepadan. Pengimbangan warna dan penyamaan histogram ialah dua teknik pemprosesan imej yang biasa digunakan yang boleh membantu meningkatkan taburan warna, kontras dan kecerahan imej. Pembaca boleh menggunakan teknologi ini secara fleksibel untuk memproses imej mengikut keperluan dan keadaan sebenar mereka sendiri untuk mendapatkan kesan visual yang lebih baik.

Atas ialah kandungan terperinci Pemprosesan imej Golang: cara mewarna imbangan dan penyamaan histogram gambar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn