Rumah > pembangunan bahagian belakang > Tutorial Python > Penyamaan histogram dalam python

Penyamaan histogram dalam python

Jennifer Aniston
Lepaskan: 2025-02-26 11:19:13
asal
623 orang telah melayarinya

peningkatan imej dengan python: tutorial penyamaan histogram

Pernah kecewa dengan imej yang berkualiti rendah? Bayangkan meningkatkan imej itu untuk mendedahkan butiran tajam dan kejelasan yang lebih baik. Tutorial ini menunjukkan kepada anda bagaimana untuk mencapai ini menggunakan python dan kuasa penyamaan histogram.

penyamaan histogram adalah teknik yang meningkatkan kontras imej. Ini adalah proses asas yang digunakan dalam hampir semua sistem kamera untuk meningkatkan kualiti imej, dan pada akhir tutorial ini, anda akan faham mengapa.

kita akan meneroka apa histogram dan penyamaan histogram, bagaimana ia mempengaruhi imej, dan kemudian melaksanakan teknik di Python. Mari kita mulakan!

Memahami histogram imej

Histogram secara visual mewakili pengedaran data berangka. Paksi x menunjukkan julat data (tong), dan paksi y memaparkan kekerapan nilai dalam setiap bin.

Dalam pemprosesan imej, setiap piksel mempunyai warna dan intensiti. Warna biasanya diwakili oleh nilai saluran merah, hijau, dan biru (RGB), dari 0 (tiada warna) hingga 255 (warna penuh). Histogram untuk saluran warna menunjukkan kekerapan setiap nilai intensiti (0-255) untuk saluran tersebut. Imej skala kelabu mempunyai histogram tunggal kerana nilai RGB adalah sama untuk setiap piksel.

Imej dengan histogram tertumpu dalam julat intensiti sempit sering kekurangan kejelasan dan perincian. Imej yang seimbang mempamerkan pengedaran intensiti yang lebih luas, lebih banyak lagi.

Apakah penyamaan histogram?

Penyamaan histogram membentangkan histogram imej untuk menggunakan julat intensiti penuh. Ini bermakna menyebarkan nilai intensiti untuk memasukkan kedua -dua kawasan gelap dan cahaya, mengakibatkan kontras yang lebih tinggi dan penglihatan terperinci yang lebih baik. Walaupun tidak selalu sesuai untuk fotografi standard, tidak ternilai dalam aplikasi yang memerlukan perincian yang dipertingkatkan, seperti pengimejan satelit atau haba.

kami akan menggunakan imej monyet skala kelabu (dengan kontras yang dikurangkan) sebagai contoh:

Histogram Equalization in Python

Mengakses Intensiti Pixel

mari kita periksa cara mengakses nilai intensiti piksel menggunakan python dan opencv:

import cv2, random

img = cv2.imread('monkey.jpg')
img_shape = img.shape
height = img_shape[0]
width = img_shape[1]

for row in range(width):
    for column in range(height):
        if random.randint(0, width) == row and row:
            print(img[column][row])
Salin selepas log masuk
Salin selepas log masuk
Kod ini membaca imej, menentukan dimensinya, dan mencetak sampel nilai piksel. OpenCV menggunakan pesanan BGR (biru, hijau, merah), jadi

mewakili intensiti 113 untuk setiap saluran. [113 113 113]

penyamaan histogram mengubah intensiti piksel ini untuk meningkatkan kontras. Kita boleh memvisualisasikan ini dengan histogram: satu untuk setiap saluran warna (atau histogram tunggal untuk skala kelabu). Paksi x menunjukkan nilai intensiti, dan paksi-y menunjukkan kekerapannya.

menggunakan kod dari artikel histogram imej yang berasingan, histogram untuk imej contoh kami kelihatan seperti ini:

Histogram ini menunjukkan pengedaran di seluruh saluran BGR. Output sampel dari kod nilai piksel menunjukkan nilai intensiti yang konsisten merentasi saluran:

import cv2, random

img = cv2.imread('monkey.jpg')
img_shape = img.shape
height = img_shape[0]
width = img_shape[1]

for row in range(width):
    for column in range(height):
        if random.randint(0, width) == row and row:
            print(img[column][row])
Salin selepas log masuk
Salin selepas log masuk

penyamaan histogram bertujuan untuk meratakan histogram ini, mengedarkan intensiti lebih merata merentasi julat.

Menganalisis kekerapan intensiti

kod python ini mengira kekerapan intensiti piksel:

<code>[113 113 113]
[110 110 110]
[106 106 106]
...</code>
Salin selepas log masuk

output menunjukkan nilai intensiti yang paling kerap dan kiraan mereka, menonjolkan kepekatan dalam julat terhad.

Melaksanakan penyamaan histogram dalam python

Kami akan menggunakan fungsi OpenCV equalizeHist(), tetapi ia hanya berfungsi pada imej skala kelabu. Oleh itu, kita akan menukar ke ruang warna YUV, menyamakan saluran Y (luminance), dan menukar kembali ke BGR:

import cv2

img = cv2.imread('monkey.jpg')
img_shape = img.shape
height = img_shape[0]
width = img_shape[1]

frequency = {}

for row in range(width):
    for column in range(height):
        intensity = img[column][row][0]
        count = frequency.get(intensity, 0)
        frequency[intensity] = count + 1

print("Unique Intensities", len(frequency))

most_frequent = dict(sorted(frequency.items(), key=lambda elem: elem[1], reverse=True))
intensity_values = most_frequent.keys()

i = 0
for intensity in intensity_values:
    i += 1
    if i <= 5:
        print(intensity, most_frequent[intensity])
Salin selepas log masuk

Contoh dan hasil lengkap

inilah kod lengkap:

import cv2
import numpy

img = cv2.imread('monkey.jpg')
img_to_yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)
img_to_yuv[:, :, 0] = cv2.equalizeHist(img_to_yuv[:, :, 0])
hist_equalization_result = cv2.cvtColor(img_to_yuv, cv2.COLOR_YUV2BGR)
cv2.imwrite('result.jpg', hist_equalization_result)
Salin selepas log masuk

Imej yang dihasilkan (result.jpg):

Histogram Equalization in Python

Perbandingan imej asal dan dipertingkatkan:

Histogram Equalization in Python Imej yang dipertingkatkan menunjukkan kejelasan yang lebih baik. Histogram imej yang dipertingkatkan adalah rata, menunjukkan pengagihan intensiti. Analisis kekerapan intensiti juga akan menunjukkan lebih banyak pengagihan nilai.

Kesimpulan

Tutorial ini menunjukkan bagaimana untuk meningkatkan kontras imej menggunakan penyamaan histogram dalam python dengan OpenCV. Hasilnya menyerlahkan keberkesanan teknik ini dalam meningkatkan kualiti imej dan penglihatan terperinci. Histogram flatter yang dihasilkan mengesahkan pengagihan semula intensiti piksel yang berjaya.

Atas ialah kandungan terperinci Penyamaan histogram dalam python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan