· Hakan Çelik · OpenCV / Görüntü İşleme · 3 dk okuma
Görüntü Geçişleri

- 1. Boya Fırçası Olarak Fare
- 2. Canny Kenar Algılama
- 3. Görüntü Geçişleri
- 4. Görüntü Piramitleri
- 5. Görüntülerde Aritmetik İşlemler
- 6. Görüntülerle İlgili Temel İşlemler
- 7. Görüntünün Geometrik Dönüşümleri
- 8. Görüntüyü Yumuşatma - ( Smoothing Images )
- 9. Histogramlar
- 10. Konturler ( Contours )
- 11. Morfolojik Dönüşümler
- 12. Opencv Nedir Ve Kurulumu
- 13. Opencv Resim Işlemleri
- 14. Opencv Video Işlemleri
- 15. Opencv'de Çizim Fonksiyonları
- 16. Performans Ölçüm Ve Geliştirme Teknikleri
- 17. Renk Alanlarını Değiştirme
- 18. Renk Paleti Olarak Parça Çubuğu ( Trackbar )
- 19. Resim Eşikleme
Görüntü Geçişleri
Image Gradients
Hedefler
Bu konuda şunları öğreneceğiz.
- Görüntü geçişlerini ve kenar bulma
- ve bu fonksiyonlar
cv2.Sobel(),cv2.Scharr(),cv2.Laplacian()vb
Teori
Opencv 3 çeşit geçiş filtresi veya yüksek geçiş filtreleri sağlar. Bunların her birini göreceğiz.
1. Sobel ve Scharr Türevleri
Sobel işlemleri ortak bir Gausssian yumuşatma artı türev işlemleridir, yani bu kadar kirliliğe karşı daha dayanıklıdır.
Alınacak olan türevin yönünü belirleyebilirsiniz, yata veya dikey ( argüman olarak, sırası ile yorder ve xorder )
Ayrıca argümanın ksize tarafından çekirdek boyutunu belirleyebilirsiniz. If ksize = -1, bir 3x3 Sobel filtreden daha iyi sonuç veren 3 x 3 Scharr filtre kullanılır.
Lütfen kullanılan çekirdekler için dokümanlara bakın.
2. Laplacian Türevleri
İlişki tarafından verilen görüntünün Laplacian ni hesaplar $$\Delta src = \frac{\partial ^2{src}}{\partial x^2} + \frac{\partial ^2{src}}{\partial y^2}$$ her türev Sobel türev yardımıyla bulunur. If ksize = 1 ( ksize 1 ise ) o zaman çekirdek aşağıdaki filtreleme için kullanılır:

Code
Aşağıdaki kod tek bir şemada tüm operatörleri gösterir. Tüm çekirdeklerin boyutu 5x5 dir. Çıkan görüntünün derinliğnden alınan sonuçların türü np.uint8 olarak geçer.
All kernels are of 5x5 size. Depth of output image is passed -1 to get the result in np.uint8 type.
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('dave.jpg',0)
laplacian = cv2.Laplacian(img,cv2.CV_64F)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)
plt.subplot(2,2,1),plt.imshow(img,cmap = 'gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,2),plt.imshow(laplacian,cmap = 'gray')
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,3),plt.imshow(sobelx,cmap = 'gray')
plt.title('Sobel X'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,4),plt.imshow(sobely,cmap = 'gray')
plt.title('Sobel Y'), plt.xticks([]), plt.yticks([])
plt.show()Sonuç:
Önemli Bir Konu!
Bizim son örneğimizde, çıkış data türü cv2.CV_8U veya np.uint8’di. Fakat bunun ile ilgili ufak bir problem var. White-to-Black ( beyazdan siyaha ) geçişler negatif slope alırken Black-to-White ( siyahtan beyaza ) geçiş pozitif slope olarak alır ( bu pozitif bir değerdir ). Yani data türünü np.uint8’ye dönüştürdüğünüzde, Bütün negatig slope’lar (slopes) ( bütün slope değerleri ) 0 yapılmalıdır.
basit bir değiş ile bu kenardan kaçarsın. Her iki kenarları tespit etmek istiyorsanız, biraz daha yüksek formlar, cv2.CV_16S, cv2.CV_64F gibi çıkan veri türleri tutmak daha iyi bir seçenektir.
Eğer mutlak değeri almak ve sonra cv2.CV_8U den geriye dönersen, bu prosedür yatay sobel filtresi için ve sonuçların içindeki farkları aşağıdaki kod ile gösterir.
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('box.png',0)
# Output dtype = cv2.CV_8U
sobelx8u = cv2.Sobel(img,cv2.CV_8U,1,0,ksize=5)
# Output dtype = cv2.CV_64F. Then take its absolute and convert to cv2.CV_8U
sobelx64f = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
abs_sobel64f = np.absolute(sobelx64f)
sobel_8u = np.uint8(abs_sobel64f)
plt.subplot(1,3,1),plt.imshow(img,cmap = 'gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(1,3,2),plt.imshow(sobelx8u,cmap = 'gray')
plt.title('Sobel CV_8U'), plt.xticks([]), plt.yticks([])
plt.subplot(1,3,3),plt.imshow(sobel_8u,cmap = 'gray')
plt.title('Sobel abs(CV_64F)'), plt.xticks([]), plt.yticks([])
plt.show()Sonucu kontrol edin :

Hakan Çelik

