Gusti Bimo M bio photo

Gusti Bimo M

Blog ga penting.

Google+ Github

Hough Transform adalah suatu metode untuk mendeteksi garis , lingkaran , atau bentuk lainya.Dasar dari Hough transform adalah transformasi garis, yang mana digunakan untuk mencari garis lurus pada citra biner.Pada Hough line transform digunakan titik-titik pada citra biner sebagai bagian dari himpunan kemungkinan garis.Titik pada tiap garis direpresentasikan sebagai titik koordinat polar(rho,theta).Persamaan untuk tiap garis adalah rho = x cos theta + y sin theta.

Source Code Python

import cv2
import numpy as np

img = cv2.imread('dor.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
minLineLength = 100
maxLineGap = 10
lines = cv2.HoughLines(edges,1,np.pi/180,100,minLineLength,maxLineGap)
for x1,y1,x2,y2 in lines[0]:
    cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)

cv2.imwrite('houghlines5.jpg',img)
cv2.imshow('hough trans', img)
cv2.imshow('canny',edges)
cv2.waitKey(0)                 # Waits forever for user to press any key
cv2.destroyAllWindows()

Selain untuk mendeteksi garis, pada Hough transform juga terdapat metode untuk mendetesi lingkaran pada citra.Hough transfrom untuk lingkaran membutuhkan penggunaan memori yanglebih daripada Line Hough Transfrom, karena pada metode ini digunakan parameter tambahan yaitu titik radius. Oleh karena itu, digunakan trik untuk mengatasi masalah tersebut yaitu memanggil method CV_HOUGH_GRADIENT dari library opencv.

Source Code Hough Circle

import cv2
import cv2.cv
import numpy as np

img = cv2.imread('images.png',0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

circles = cv2.HoughCircles(img,cv2.cv.CV_HOUGH_GRADIENT,1,20,
                            param1=50,param2=30,minRadius=0,maxRadius=0)

circles = np.uint16(np.around(circles))
for i in circles[0,:]:
    # draw the outer circle
    cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
    # draw the center of the circle
    cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)

cv2.imshow('detected circles',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()