Bu zamana kadar hep aynı büyüklükte ve aynı çözünürlükte resimlerle çalıştık.fakat işlenecek resiminin bazı durumlarda farklı boyutlarında ve çözünürlüklerinde çalışmamız gerekebilir.Bir örnekle anlatmamız gerekirse bir resimde araba ararken arabanın resimde hangi boyutta olacağından emin değiliz.Bu durumda işlenecek resimin farklı boyutlarda farklı çözünürlükte görüntülerini alıp araba taraması yapmamız gerekebilir.İşte bu farklı çözünürlükte oluşan resimlere Resim Piramitleri denir.
İki farklı tür resim piramidi vardır.Bunlar;
1) Gauss Piramidi
2) Laplace Piramidi
1)Gauss Piramidi
Bir Gauss piramidindeki yüksek seviye(Düşük çözünürlük),alt seviyedeki(yüksek çözünürlük) görüntüdeki ardışık satırları ve sütunları kaldırarak oluşturulur. Ardından daha üst seviyedeki her piksel alt seviyedeki ve gauss ağırlıkları olan 5 pikselin katkısıyla oluşturulmuştur.Bu işlem yapılarak MxN çözünürlüğünde bir resim M/2xN/2 çözünürlüğünde bir resim haline gelir. Bu nedenle alan orjinal resim alanın 4 kat küçük haline dönüşür.
Gauss piramidi işlemi "cv2.pyrDown()" ve "cv2.pyrUp()" işlemleri ile gerçekleştirilir
img = cv2.imread('img.jpg')
lower_reso = cv2.pyrDown(higher_reso)
╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍ lower_reso = cv2.pyrDown(higher_reso)
🔶Bir Örnek Üzerinden pyrDown işlemini detaylı inceleyelim...
➤ Yapılan işlem ile resim alanı 4 kat küçültülsün.
import cv2
img = cv2.imread('trafik.jpg')
h,w = img.shape[:2]
img1 = cv2.pyrDown(img,dstsize = (w/2,h/2))
cv2.imshow('orjinal resim',img)
cv2.imshow('Dusuk Cozunurluk',img1)
cv2.waitKey()
cv2.destroyAllWindows()
img = cv2.imread('trafik.jpg')
h,w = img.shape[:2]
img1 = cv2.pyrDown(img,dstsize = (w/2,h/2))
cv2.imshow('orjinal resim',img)
cv2.imshow('Dusuk Cozunurluk',img1)
cv2.waitKey()
cv2.destroyAllWindows()
⬇
Kodu açıklayacak olursak; ⚫h,w =img.shape[:2]: Resimin en ve boy bilgilerini h,w
parametrelerine yazar.
⚫img1 =cv2.pyrDown(img,dstsize=(w/2,h/2)): Orjinal
resmi eninden ve boyundan 2 kat küçülterek toplamda
orjinal resimin 4 kat küçük hali eldilir.
Sonuç:
╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍
🔶Bir örneklede pyrUp işlemini inceleyelim...
➤ Yapılan işlemle giriş resminin alanı 4 kat büyüsün.Yapılan
işlemde giriş resmini aynı seçilsin.
import cv2
img = cv2.imread('trafik.jpg')
h,w = img.shape[:2]
img1 = cv2.pyrUp(img,dstsize = (w*2,h*2))
cv2.imshow('orjinal resim',img)
cv2.imshow('Yuksek Cozunurluklu',img1)
cv2.waitKey()
cv2.destroyAllWindows()
img = cv2.imread('trafik.jpg')
h,w = img.shape[:2]
img1 = cv2.pyrUp(img,dstsize = (w*2,h*2))
cv2.imshow('orjinal resim',img)
cv2.imshow('Yuksek Cozunurluklu',img1)
cv2.waitKey()
cv2.destroyAllWindows()
⬇
Kodu Açıklayacak olursak;⚫img1 =cv2.pyrUp(img,dstsize=(w*2,h*2)): Resim en ve
boy parametreleri ikişer kat büyütülmüştür.Totalde resim
alanı 4 kat büyümüştür.
Sonuç:
╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍
1)Laplace Piramidi
Laplace piramitleri Gauss piramitlerinden oluşur. Laplace piramitleri için özel bir işlem yoktur. Laplace piramiti görüntüleri kenar görüntüleri gibidir.Görüntü sıkıştırma metodu kullanırlar.Laplace seviyesinin üç seviyesi aşağıdaki gibi görünecektir.
╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍
Piramit Kullanarak Resim Karıştırma
Yapacağımız işlemde iki resimi birbirine dikeceğiz.Normalde dikilen iki farklı resim arasında bir uyuşmazlık oluşur piramit yöntemi ile bu uyuşmazlık en aza indirlebilir.Bu olayı bir örnekle açıklamaya çalışalım.
Elma ve portakal resimlerini birbirne uyumsuzluk olmadan dikelim.Bu olay basitçe şu şekilde yapılır;
1) Elma ve Portakal resimleri yüklenir.
2) Elma ve portakal resimlerinin Gauss piramitleri bulunur.
3) Gauss ve Laplace piramitleri bulunur.
4) Elmanın sol yarısını portakalın sağ yarısına katar.
5) Bu ortak görüntü tek bir resimde gösterilir.
import cv2
import numpy as np, sys
# resimleri yükle
imgA = cv2.imread('apple.jpg')
imgB = cv2.imread('orange.jpg')
# piramit sayisi
levels = 5
# Gauss piramitini set et
gaussianPyramidA = [imgA.copy()]
for i in range(1, levels):
gaussianPyramidA.append(cv2.pyrDown(gaussianPyramidA[i - 1]))
# Gauss piramitini set et
gaussianPyramidB = [imgB.copy()]
for i in range(1, levels):
gaussianPyramidB.append(cv2.pyrDown(gaussianPyramidB[i - 1]))
# laplace piramitini set et
laplacianPyramidA = [gaussianPyramidA[-1]]
for i in range(levels - 1, 0, -1):
laplacian = cv2.subtract(gaussianPyramidA[i - 1], cv2.pyrUp(gaussianPyramidA[i]))
laplacianPyramidA.append(laplacian)
# Laplace piramidini tersleyerek set et
laplacianPyramidB = [gaussianPyramidB[-1]]
for i in range(levels - 1, 0, -1):
laplacian = cv2.subtract(gaussianPyramidB[i - 1], cv2.pyrUp(gaussianPyramidB[i]))
laplacianPyramidB.append(laplacian)
# Laplace uygula
laplacianPyramidComb = []
for laplacianA, laplacianB in zip(laplacianPyramidA, laplacianPyramidB):
rows, cols, dpt = laplacianA.shape
laplacianComb = np.hstack((laplacianA[:, 0:cols / 2], laplacianB[:, cols / 2:]))
laplacianPyramidComb.append(laplacianComb)
imgComb = laplacianPyramidComb[0]
for i in range(1, levels):
imgComb = cv2.add(cv2.pyrUp(imgComb), laplacianPyramidComb[i])
# Sonuçları gözle
cv2.imshow('image', imgComb)
cv2.imwrite('image.png', imgComb)
cv2.waitKey(0)
cv2.destroyAllWindows()
import numpy as np, sys
# resimleri yükle
imgA = cv2.imread('apple.jpg')
imgB = cv2.imread('orange.jpg')
# piramit sayisi
levels = 5
# Gauss piramitini set et
gaussianPyramidA = [imgA.copy()]
for i in range(1, levels):
gaussianPyramidA.append(cv2.pyrDown(gaussianPyramidA[i - 1]))
# Gauss piramitini set et
gaussianPyramidB = [imgB.copy()]
for i in range(1, levels):
gaussianPyramidB.append(cv2.pyrDown(gaussianPyramidB[i - 1]))
# laplace piramitini set et
laplacianPyramidA = [gaussianPyramidA[-1]]
for i in range(levels - 1, 0, -1):
laplacian = cv2.subtract(gaussianPyramidA[i - 1], cv2.pyrUp(gaussianPyramidA[i]))
laplacianPyramidA.append(laplacian)
# Laplace piramidini tersleyerek set et
laplacianPyramidB = [gaussianPyramidB[-1]]
for i in range(levels - 1, 0, -1):
laplacian = cv2.subtract(gaussianPyramidB[i - 1], cv2.pyrUp(gaussianPyramidB[i]))
laplacianPyramidB.append(laplacian)
# Laplace uygula
laplacianPyramidComb = []
for laplacianA, laplacianB in zip(laplacianPyramidA, laplacianPyramidB):
rows, cols, dpt = laplacianA.shape
laplacianComb = np.hstack((laplacianA[:, 0:cols / 2], laplacianB[:, cols / 2:]))
laplacianPyramidComb.append(laplacianComb)
imgComb = laplacianPyramidComb[0]
for i in range(1, levels):
imgComb = cv2.add(cv2.pyrUp(imgComb), laplacianPyramidComb[i])
# Sonuçları gözle
cv2.imshow('image', imgComb)
cv2.imwrite('image.png', imgComb)
cv2.waitKey(0)
cv2.destroyAllWindows()
Takipçinizim hocam böyle devam edin <3
YanıtlaSilTeşekkür ederim hocam :)
Sil