在極坐標中,圓的表示方式為:
創(chuàng)新互聯(lián)公司專注于鄯善企業(yè)網(wǎng)站建設,響應式網(wǎng)站,商城建設。鄯善網(wǎng)站建設公司,為鄯善等地區(qū)提供建站服務。全流程按需定制開發(fā),專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務x=x0+rcosθ
y=y0+rsinθ
圓心為(x0,y0),r為半徑,θ為旋轉度數(shù),值范圍為0-359
如果給定圓心點和半徑,則其它點是否在圓上,我們就能檢測出來了。在圖像中,我們將每個非0像素點作為圓心點,以一定的半徑進行檢測,如果有一個點在圓上,我們就對這個圓心累加一次。如果檢測到一個圓,那么這個圓心點就累加到大,成為峰值。因此,在檢測結果中,一個峰值點,就對應一個圓心點。
霍夫圓檢測的函數(shù):
skimage.transform.hough_circle(image, radius)
radius是一個數(shù)組,表示半徑的集合,如[3,4,5,6]
返回一個3維的數(shù)組(radius index, M, N), 第一維表示半徑的索引,后面兩維表示圖像的尺寸。
例1:繪制兩個圓形,用霍夫圓變換將它們檢測出來。
import numpy as np import matplotlib.pyplot as plt from skimage import draw,transform,feature img = np.zeros((250, 250,3), dtype=np.uint8) rr, cc = draw.circle_perimeter(60, 60, 50) #以半徑50畫一個圓 rr1, cc1 = draw.circle_perimeter(150, 150, 60) #以半徑60畫一個圓 img[cc, rr,:] =255 img[cc1, rr1,:] =255 fig, (ax0,ax1) = plt.subplots(1,2, figsize=(8, 5)) ax0.imshow(img) #顯示原圖 ax0.set_title('origin image') hough_radii = np.arange(50, 80, 5) #半徑范圍 hough_res =transform.hough_circle(img[:,:,0], hough_radii) #圓變換 centers = [] #保存所有圓心點坐標 accums = [] #累積值 radii = [] #半徑 for radius, h in zip(hough_radii, hough_res): #每一個半徑值,取出其中兩個圓 num_peaks = 2 peaks =feature.peak_local_max(h, num_peaks=num_peaks) #取出峰值 centers.extend(peaks) accums.extend(h[peaks[:, 0], peaks[:, 1]]) radii.extend([radius] * num_peaks) #畫出最接近的圓 image =np.copy(img) for idx in np.argsort(accums)[::-1][:2]: center_x, center_y = centers[idx] radius = radii[idx] cx, cy =draw.circle_perimeter(center_y, center_x, radius) image[cy, cx] =(255,0,0) ax1.imshow(image) ax1.set_title('detected image')
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。