Python'da Görüntü İşleme/Düzenleme

in #utopian-io6 years ago (edited)

#English
Hi everyone. im Javatorman
Image Rewrite and Enhancement in Python

#Turkce
Merhaba arkadaşlar ben Javatorman. Phyton üzerinde görüntü işleme dersiyle beraberiz. Bu yazıyı, teorik olarak bazı terimleri kullanarak öğrenmeye başlayayım. Görüntü geliştirme hakkında konuşurken , bu temelde resmin orijinalinden daha uygun olan yeni bir sürümünü istediğimiz anlamına gelir.

Örneğin, bir belgeyi taradığınızda, çıktı görüntüsü orijinal giriş görüntüsünden daha düşük bir kaliteye sahip olabilir. Bu nedenle çıktı görüntülerinin kalitesini iyileştirmenin bir yolu olmalı; böylece görüntüleyiciler için görsel açıdan daha etkili olabiliyoruz ve görüntü zenginleştirmenin yürürlüğe girdiği yer burasıdır. Bir görüntüyü geliştirdiğimizde, yaptığımız, kontrast ve kenarlar gibi görüntü özelliklerini keskinleştirmektir.

Görüntü iyileştirmesinin görüntünün bilgi içeriğini arttırmadığını, ancak seçilen özelliklerin dinamik aralığını artırdığını ve bunun sonucunda görüntü kalitesini artıracağını belirtmek önemlidir. Yani burada aslında çıktı görüntüsünün neye benzeyeceğini bilmiyoruz, ancak, örneğin çıkış görüntüsünde daha fazla ayrıntı gözlemlemek gibi herhangi bir gelişme olup olmadığı (öznel olarak) söyleyebilmeliyiz.

Görüntü geliştirme genellikle sayısal görüntü işleme (segmentasyon, gösterim) ile ilgili temel aşamalarda bir önişleme adımı olarak kullanılır. Görüntü geliştirme için pek çok teknik var, ancak bu yazının iki tekniğini ele alacağım: görüntü ters ve güç yasası dönüşümü . Bunları Python'da nasıl uygulayacağımıza bir göz atacağız.

#Ters Görüntü
Bu bölümün başlığından ( görüntünün olumsuzlaması olarak da bilinir ) tahmin edebileceğiniz gibi , görüntü tersi, giriş görüntüsündeki karanlık yoğunlukları çıktı görüntüsündeki parlak yoğunluklara ve giriş görüntüsündeki parlak yoğunluklara dönüştürmeyi amaçlamaktadır çıktı görüntüsündeki karanlık yoğunluklara göre değişir. Diğer bir deyişle, karanlık bölgeler hafifleşir ve açık alanlar daha koyu hale gelir.

De ki I(i,j)pikselin yoğunluk değerini ifade eder (i,j). Burada biraz netleştirmek için gri tonlama görüntüsündeki yoğunluk değerleri aralıkta [0,255]ve (i,j)sırasıyla satır ve sütun değerlerini belirtir. Gri tonlamalı bir görüntü üzerinde görüntü ters işlemcisini uyguladığımızda, çıktı piksel O(i,j)değeri şu şekilde olacaktır:
image.png

Günümüzde resimlerimizin çoğu renkli görüntülerdir. Bu görüntüler üç kanal içeren kırmızı , yeşil ve mavidir. Bu durumda, yukarıdaki formülün aksine, her bir kanalın yoğunluğunu 255'ten çıkarmamız gerekir. Böylece, çıktı görüntüsü aşağıdaki değerlere sahip olacaktır (i,j):
image.png

Bu girişten sonra, görüntü ters işlemcisini Python'da nasıl uygulayacağımıza bir göz atalım. Basitlik uğruna, operatörü gri tonlamalı bir resim üzerinde yürüteceğimdizden bahsedelim. Ancak, operatörün renkli bir resim üzerinde uygulanması hakkında bazı fikirler vereceğim.

Renkli bir görüntü için yapmanız gereken ilk şey, her piksel kanalının (yani RGB) yoğunluk değerinin çıkarılmasıdır. Bu amaçla, Python Görüntüleme Kitaplığı'nı (PIL) kullanabilirsiniz . Devam edin ve baboon.png'den örnek bir maymun resmi indirin . Resmin büyüklüğü 500x500. Diyelim ki, piksel konumunda bulunan kırmızı, yeşil ve mavi yoğunluk değerlerini çıkarmak istiyorsunuz (325, 432). Bu şöyle yapılabilir:

image.png

getpixel() Komutunu çalıştırıyoruz
Bu Komut belli pozisyonlardaki piksel değerlerini döndürür.

Yukarıdaki komut dosyasını çalıştırdıktan sonra, yalnızca aşağıdaki sonucu göreceksiniz: Ancak üç kanalın (RGB) yoğunluk değerleri nerede? Sorun mode görüntünün okunmasıyla birlikte görünüyor . Aşağıdaki ifadeyi çalıştırarak modu kontrol edin:
image.png
print im.mode
Çıktıyı alırsınız P yani görüntünün bir palet modunda okunduğu anlamına gelir . Yapabileceğiniz bir şey, farklı kanalların yoğunluk değerlerini döndürmeden önce görüntüyü RGB moduna çevirmektir. Bunu yapmak için convert() yöntemi aşağıdaki gibi kullanabilirsiniz :
image.png
rgb_im = im.convert('RGB')
Bu durumda, çıktı aşağıdaki değerleri alacaktır: (180, 168, 178). Bu, kırmızı, yeşil ve mavi kanalların yoğunluk değerlerinin sırasıyla 180, 168 ve 178 olduğu anlamına gelir.

Şu ana kadar anlattığımız her şeyi bir araya getirmek için bir görüntünün RGB değerlerini döndürecek Python komut dosyası aşağıdaki gibi görünür:
image.png
Görüntü ters işlemcisine ilerlemeden önce bir nokta kaldı. Yukarıdaki örnekte sadece bir pikselin RGB değerinin nasıl alınacağı gösterilmektedir , ancak ters operatörü gerçekleştirirken bunu tüm piksellerde gerçekleştirmeniz gerekir .

Her bir pikselin farklı kanalları için tüm yoğunluk değerlerini basmak için şunları yapabilirsiniz:
image.png

Bu noktada, her bir pikselin tüm renkli görüntü kanallarına (yani RGB) görüntü ters işlemcisinin nasıl uygulanacağını bulmanız için bir egzersiz olarak bırakacağım.

Gri tonlamalı bir resim üzerinde görüntü ters işlemcisini uygulayan bir örneği inceleyelim. Devam edin ve bu bölümdeki test imajımız olacak olan boat.tiff dosyasını indirin . İşte böyle görünüyor:
image.png

scipy kütüphanesini kullanacağız. Yukarıdaki resimde ters tersi operatörün uygulanması için Python betiği şu şekilde olmalıdır:
image.png

Görüntüyü okuduktan sonra yaptığımız ilk şey , görüntünün ters operatörünü uygulamak için bir ndarray'e dönüştürmektir . Operatörü uyguladıktan sonra, yalnızca ndarray'ı bir görüntüye dönüştürür ve o görüntüyü olduğu gibi kaydederiz result.tiff. Aşağıdaki şekil, görüntü tersinin yukarıdaki görüntüye uygulanmasının sonucunu görüntüler (orijinal resim solda bulunur ve görüntünün ters operatörünün uygulanmasının sonucu sağda bulunur):
image.png
Operatörü uyguladıktan sonra görüntünün bazı özelliklerinin daha belirginleştiğine dikkat edin. Mesela bulutlarda ve sağdaki fenerde.

Güç Yasası Dönüşümü

Gama düzeltme olarak da adlandırılan bu operatör, bir görüntüyü geliştirmek için kullanabileceğimiz bir başka operatördür. Operatörün denklemini görelim. Pikselde (i,j), operatör aşağıdaki gibi görünüyor:

image.png
I(i,j)görüntü konumundaki yoğunluk değeridir (i,j); ve kve gamma pozitif sabitlerdir. Burada matematiksel ayrıntılara girmeyeceğim, ancak bu konunun görüntü işleme kitaplarında ayrıntılı açıklamalara sahip olabileceğini düşünüyorum. Bununla birlikte, çoğu durumda k=1, bu nedenle ağırlıklı olarak gama değerini değiştireceğimizi belirtmek önemlidir . Yukarıdaki denklem aşağıdaki şekilde azaltılabilir:

image.png

BenOpenCV ve NumPy kütüphanelerin burada kullanacağım . Nazikçe öğreticimi kontrol edebilirsiniz NumPy'ye giriş , kütüphane hakkında daha fazla bilgi edinmeniz gerekiyorsa. Test resmimiz yine boat.tiff olacaktır (devam edin ve indirin).

Güç Yasası Dönüştürme operatörünü gerçekleştirmek için kullanılan Python komut dosyası aşağıdaki gibi görünür:
image.png
Seçtiğimiz gamma değerine dikkat edin 0.6. Aşağıdaki resim orijinal resmi ve Power Law Transformation (Güç Yasası Dönüştürme) operatörünü o görüntüye uygulamanın sonucunu göstermektedir (soldaki resim orijinal resmi, sağdaki resim güç yasası dönüşüm operatörünü uyguladıktan sonra sonucu göstermektedir).

image.png
Yukarıdaki sonuç ne zaman oldu gamma = 0.6. Gama artırdığımızda ne olacağını görelim 1.5, örneğin:
Yukarıdaki sonuç ne zaman oldu gamma = 0.6. Gama artırdığımızda ne olacağını görelim 1.5, örneğin:
image.png

Gama değerini yükselttikçe, görüntü daha koyu hale gelir ve tersi de tersine dikkat edin.

Kişi, güç yasası dönüşümünün kullanımının ne olabileceğini soruyor olabilir. Aslında, görüntü toplama, yazdırma ve görüntüleme için kullanılan farklı cihazlar güç yasası dönüştürme operatöre göre tepki verir. Bunun nedeni insan beyninin bir görüntüyü işlemek için gama düzeltme kullanmasıdır. Örneğin, bir görüntünün bir bilgisayar monitöründe veya televizyon ekranlarında doğru şekilde görüntülenmesini istediğinizde (tüm görüntülerde en iyi görüntü kontrastı görüntülenir), gama düzeltme önemlidir.

Sonuç
Bu yazıda, Python kullanarak görüntüleri nasıl geliştirileceğini öğrendiniz. Görüntü ters işlemcisini kullanarak özellikleri nasıl vurguladığınızı ve güç yasası dönüşümünün, bilgisayar monitörlerinde ve televizyon ekranlarında görüntüleri doğru bir şekilde görüntülemek için önemli bir operatör olarak gördüğünü gördünüz.



Posted on Utopian.io - Rewarding Open Source Contributors

Sort:  

Your contribution cannot be approved because it does not follow the Utopian Rules, and is considered as plagiarism. Plagiarism is not allowed on Utopian, and posts that engage in plagiarism will be flagged and hidden forever.
http://mindmapengineers.com/mmeblog/image-enhancement-python
You can contact us on Discord.
[utopian-moderator]

Coin Marketplace

STEEM 0.18
TRX 0.13
JST 0.028
BTC 58080.30
ETH 3102.16
USDT 1.00
SBD 2.40