Forum Diskusi Contour Segmentation

Sintesis: Canny dan Otsu

Re: Sintesis: Canny dan Otsu

by FADHIL ARRIJAL -
Number of replies: 0

Penjelasan:

Gambar asli dibaca dari file 'pictnight.jpg' menggunakan OpenCV.

- Gambar dikonversi ke citra grayscale dengan mengubah gambar berwarna menjadi gambar hitam putih tanpa informasi warna.

-Deteksi tepi pada citra grayscale dengan algoritma Canny. Tepi adalah area di mana intensitas piksel berubah secara tajam.

- Metode thresholding Otsu digunakan untuk mengubah citra grayscale menjadi citra biner (hitam putih) dengan menemukan ambang (threshold) yang optimal. Ambang ini dipilih berdasarkan analisis histogram citra.

 

Script Code :

import cv2
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns



# membaca citra mode grayscale
image = cv2.imread('pictnight1.jpg', cv2.IMREAD_GRAYSCALE)
imgrgb= cv2.imread('pictnight1.jpg')
imgrgb = cv2.cvtColor(imgrgb, cv2.COLOR_BGR2RGB)

# Pra-pemrosesan citra - penghalusan menggunakan filter Gaussian
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)

# Deteksi tepi dengan Canny
canny_edge = cv2.Canny(blurred_image, 100, 200)

# Thresholding Otsu
_, otsu_thresh = cv2.threshold(blurred_image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

# Hitung histogram untuk masing-masing citra
hist_original = cv2.calcHist([image], [0], None, [256], [0, 256])
hist_canny = cv2.calcHist([canny_edge], [0], None, [256], [0, 256])
hist_otsu = cv2.calcHist([otsu_thresh], [0], None, [256], [0, 256])

# Plot citra asli, histogram, hasil deteksi tepi Canny, histogram, Thresholding Otsu, dan histogram
plt.figure(figsize=(15, 8))

# Plot citra asli
plt.subplot(231)
plt.imshow(imgrgb, cmap='gray')
plt.title('original image', fontsize=12, color='red', ha='center')

# Plot histogram citra asli
plt.subplot(232)
plt.plot(hist_original, color='blue')
plt.title('Histogram - Original Image')
plt.xlabel('Intensitas')
plt.ylabel('Frekuensi')

# Plot citra hasil deteksi tepi Canny
plt.subplot(233)
plt.imshow(canny_edge, cmap='gray')
plt.title('Canny Edge Detection')

# Plot histogram hasil deteksi tepi Canny
plt.subplot(234)
plt.hist(canny_edge.ravel(), bins=256, range=(0, 256), color='blue', alpha=0.6)
plt.title('Histogram - Canny Edge Detection')
plt.ylabel('Frekuensi')

# Plot citra hasil Thresholding Otsu
plt.subplot(235)
plt.imshow(otsu_thresh, cmap='gray')
plt.title('Otsu Thresholding')

# Plot histogram hasil Thresholding Otsu
plt.subplot(236)
plt.hist(otsu_thresh.ravel(), bins=256, range=(0, 256), color='blue', alpha=0.6)
plt.title('Histogram - Otsu Thresholding')
plt.xlabel('Intensitas')
plt.ylabel('Frekuensi')

# Tampilkan plot tanpa whitegrid
plt.show()
 

- Menampilkan Gambar dan Histogram:

-Gambar Asli: Gambar asli ditampilkan dalam bentuk warna.
-Citra Tepi Canny: Citra tepi Canny (hasil deteksi tepi) ditampilkan dalam bentuk grayscale.
-Histogram Tepi Canny: Histogram intensitas piksel untuk citra tepi Canny ditampilkan.
-Hasil Segmentasi Otsu: Hasil segmentasi Otsu (citra biner) ditampilkan dalam bentuk grayscale.
-Histogram Segmentasi Otsu: Histogram intensitas piksel untuk hasil segmentasi Otsu ditampilkan.
Program ini memberikan visualisasi dari gambar asli, deteksi tepi menggunakan algoritma Canny, hasil segmentasi menggunakan metode thresholding Otsu, serta histogram untuk kedua proses tersebut. Hal ini membantu pengguna untuk memahami perubahan citra yang terjadi melalui setiap langkah pengolahan.

Attachment Comparing Canny Edge Detection.png