Ana içeriğe geç

Dördüncü Ders

Ders İçeriği

  1. Maskeleme
  2. Threshold
  3. Kenar Tespiti

1. Maskeleme

OpenCV'de maskeleme, bir görüntüde belirli bir bölgeyi seçmek için kullanılan bir yöntemdir. Maskeler, piksel değerleri 0 veya 1 olan bir matris şeklinde tanımlanır. Bu matris, görüntü üzerindeki her piksel için bir maske değeri içerir. Pikselin değeri 0 ise, o piksel görüntüde görüntülenmez. Pikselin değeri 1 ise, o piksel görüntüde görüntülenir. Maskelemeyi uygulamak için, önce bir maske oluşturulur ve ardından bu maske kullanılarak görüntü üzerindeki ilgili pikseller seçilir.

Maskeleme, nesne takibi, görüntü segmentasyonu ve görüntü parçacıkları analizi gibi birçok farklı görüntü işleme uygulamasında kullanılır. İşte OpenCV kütüphanesi içinde bulunan bazı maskeleme yöntemleri:

1.1. Bitwise Maskeleme:

Bitwise maskeleme, iki görüntü arasında mantıksal bir işlem gerçekleştirir ve sonucu yeni bir görüntü olarak döndürür. Bu yöntem, görüntüleri birleştirme, maskeleme ve nesne takibi gibi birçok farklı uygulamada kullanılır.

import cv2
import numpy as np

image = cv2.imread("resim.jpg")
mask = np.zeros(image.shape[:2], dtype="uint8")
cv2.rectangle(mask, (150, 150), (450, 450), 255, -1)
masked_image = cv2.bitwise_and(image, image, mask=mask)

cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("Maske", mask)
cv2.imshow("Maskeleme Görüntüsü", masked_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

1.2. Threshold Maskeleme:

Threshold maskeleme, bir görüntüyü ikili bir görüntüye dönüştürmek için kullanılır. Bu yöntem, nesne takibi ve görüntü segmentasyonu gibi birçok farklı uygulamada kullanılır.

import cv2

image = cv2.imread("resim.jpg", cv2.IMREAD_GRAYSCALE)
_, mask = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
masked_image = cv2.bitwise_and(image, image, mask=mask)

cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("Maske", mask)
cv2.imshow("Maskeleme Görüntüsü", masked_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

1.3. Adaptive Threshold Maskeleme:

Adaptive threshold maskeleme, bir görüntüyü ikili bir görüntüye dönüştürmek için kullanılır ve her pikselin threshold değeri, etrafındaki piksellerin ortalama değerine göre belirlenir. Bu yöntem, değişken aydınlatma koşullarında ve zayıf kenarların bulunduğu görüntülerde daha iyi sonuçlar verir.

import cv2

image = cv2.imread("resim.jpg", cv2.IMREAD_GRAYSCALE)
masked_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)

cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("Maskeleme Görüntüsü", masked_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

2. Threshold

Threshold, bir görüntüdeki piksel değerlerini belirli bir eşik değerine göre ikili bir görüntüye dönüştürmek için kullanılan bir yöntemdir. Bu yöntem, görüntü işleme uygulamalarında sıklıkla kullanılır ve nesne takibi, görüntü segmentasyonu ve kenar tespiti gibi birçok farklı uygulamada kullanılabilir.

OpenCV kütüphanesi, threshold işlemini gerçekleştirmek için birçok işlev sağlar. İşte bazı örnekler:

2.1. Basit Threshold:

Bu yöntem, bir görüntüdeki piksel değerlerini belirli bir eşik değerine göre ikili bir görüntüye dönüştürmek için kullanılır. Bu yöntem, görüntü segmentasyonu ve nesne takibi gibi birçok farklı uygulamada kullanılır.

import cv2

image = cv2.imread("resim.jpg", cv2.IMREAD_GRAYSCALE)
_, thresh_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)

cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("Threshold Görüntüsü", thresh_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.2. Otsu's Threshold:

Otsu's threshold yöntemi, görüntüdeki histogram dağılımını kullanarak, piksel değerlerini belirli bir eşik değerine göre ikili bir görüntüye dönüştürmek için kullanılır. Bu yöntem, birçok farklı uygulamada kullanılır ve görüntü segmentasyonu ve nesne takibi gibi uygulamalarda başarılı sonuçlar verir.

import cv2

image = cv2.imread("resim.jpg", cv2.IMREAD_GRAYSCALE)
_, thresh_image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)

cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("Otsu Threshold Görüntüsü", thresh_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.3. Adaptive Threshold:

Adaptive threshold yöntemi, her pikselin eşik değerini belirlemek için pikselin etrafındaki alanın ortalaması ve standart sapması gibi yerel bilgiyi kullanır. Bu yöntem, aydınlatma koşulları değişken olan görüntülerde veya farklı yapısal özellikleri olan görüntülerde başarılı sonuçlar verir.

import cv2

image = cv2.imread("resim.jpg", cv2.IMREAD_GRAYSCALE)
thresh_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)

cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("Adaptive Threshold Görüntüsü", thresh_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.4. Adaptive Gaussian Threshold:

Adaptive Gaussian threshold, Adaptive threshold ile aynı mantığa sahiptir. Ancak, bu yöntem, eşik değerini hesaplarken, ortalamaya ek olarak, bir Gaussian dağılımını da kullanır. Bu nedenle, Adaptive Gaussian threshold, nesne tespiti ve görüntü segmentasyonu gibi uygulamalarda iyi sonuçlar verir.

import cv2

image = cv2.imread("resim.jpg", cv2.IMREAD_GRAYSCALE)
thresh_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("Adaptive Gaussian Threshold Görüntüsü", thresh_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.5. Adaptive Mean Threshold:

Adaptive mean threshold yöntemi, bir pikselin eşik değerini, o pikselin etrafındaki alanın ortalamasına göre belirler. Bu yöntem, Adaptive Gaussian threshold yöntemi gibi, aydınlatma koşullarında değişkenlik gösteren görüntülerde oldukça etkilidir.

import cv2

image = cv2.imread("resim.jpg", cv2.IMREAD_GRAYSCALE)
thresh_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)

cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("Adaptive Mean Threshold Görüntüsü", thresh_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

3. Kenar Tespiti

OpenCV ile kenar tespiti yapmak için birkaç yöntem mevcuttur. En yaygın olarak kullanılan yöntemler, Canny Edge Detection ve Sobel Edge Detection'dır.

3.1. Canny Edge Detection:

Canny Edge Detection, görüntüdeki kenarları bulmak için kullanılan en yaygın yöntemlerden biridir. Bu yöntem, görüntüdeki kenarları bulmak için bir dizi işlem yapar. İlk olarak, görüntüye Gaussian filtre uygulanır. Daha sonra, görüntü gradyanı hesaplanır ve kenar pikselleri bulmak için bir eşik değeri kullanılır.

import cv2

image = cv2.imread("resim.jpg", cv2.IMREAD_GRAYSCALE)
edges = cv2.Canny(image, 100, 200)

cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("Canny Kenar Algılama Görüntüsü", edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.2. Sobel Edge Detection:

Sobel Edge Detection, görüntüdeki kenarları bulmak için başka bir yöntemdir. Bu yöntem, bir pikselin gradyanını hesaplamak için Sobel operatörünü kullanır. Bu operatör, her bir pikselin x ve y yönündeki gradyanlarını hesaplar ve daha sonra bu gradyanları birleştirerek kenar piksellerini bulur.

import cv2

image = cv2.imread("resim.jpg", cv2.IMREAD_GRAYSCALE)
sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=5)
sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=5)
edges = cv2.bitwise_or(sobel_x, sobel_y)

cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("Sobel Kenar Algılama Görüntüsü", edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

Bu örnekler, OpenCV kütüphanesi içinde bulunan Canny Edge Detection ve Sobel Edge Detection yöntemlerini kullanarak kenar tespiti yapmanın nasıl yapılabileceğini gösterir. Bu yöntemler, nesne takibi, görüntü segmentasyonu ve diğer birçok görüntü işleme uygulamalarında yaygın olarak kullanılır.