改進(jìn)的canny算法_第1頁
改進(jìn)的canny算法_第2頁
改進(jìn)的canny算法_第3頁
改進(jìn)的canny算法_第4頁
改進(jìn)的canny算法_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、改進(jìn)的canny算法importpic_processaspreimg=plt.imread(many.jpg)image=img.copy()sigmal=sigma2=1sum=0gaussian=np.zeros(5,5)foriinrange(5):forjinrange(5):gaussiani,j=math.exp(-1/2*(np.square(i-3)/np.square(sigma1)#生成二維高斯分布矩陣+(np.square(j-3)/np.square(sigma2)/(2*math.pi*sigmal*sigma2)sum=sum+gaussiani,jgaussia

2、n=gaussian/sumprint(gaussian)defrgb2gray(rgb):returnnp.dot(rgb,:3,0.299,0.587,0.114)stepl.高斯濾波#gray=rgb2gray(img)gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#gray=cv2.equalizeHist(gray)W,H=gray.shapenew_gray=np.zeros(W-5,H-5)foriinrange(W-5):forjinrange(H-5):grayi,j=np.sum(grayi:i+5,j:j+5*gaussian)#與高斯

3、矩陣卷積實(shí)現(xiàn)濾波W,H=gray.shapenew_gray=np.zeros(W-5,H-5)foriinrange(W-5):forjinrange(H-5):new_grayi,j=np.sum(grayi:i+5,j:j+5*gaussian)#與高斯矩陣卷積實(shí)現(xiàn)濾波plt.imshow(new_gray,cmap=gray)step2.增強(qiáng)通過求梯度幅值W1,H1=new_gray.shapedx=np.zeros(W1-1,H1-1)dy=np.zeros(W1-1,H1-1)dx2=np.zeros(W1-1,H1-1)dy2=np.zeros(W1-1,H1-1)d=np.ze

4、ros(W1-1,H1-1)foriinrange(W1-1):forjinrange(H1-1):dxi,j=(2*new_grayi,j+1-2*new_grayi,j-1+grayi-1,j+1-grayi-1,j-1+new_grayi+1,j+1-new_grayi+1,j-1)dyi,j=(2*new_grayi+1,j-2*new_grayi-1,j+grayi+1,j+1-grayi-1,j+1+new_grayi+1,j-1-new_grayi-1,j-1)dxi,j=new_grayi,j+1-new_grayi,jdyi,j=new_grayi+1,j-new_grayi

5、,jdxi,j=new_grayi,j+1-new_grayi,j+new_grayi+1,j+1-new_grayi+1,jdyi,j=new_grayi+1,j-new_grayi,j+new_grayi+1,j+1-new_grayi,j+1#dx2i,j=new_grayi+1,j+1-new_grayi,jdy2i,j=new_grayi-1,j+1-new_grayi,jdy2i,j=new_grayi-1,j+1-new_grayi,jdxi,j=new_grayi,j+1-2*new_grayi,j+new_grayi,j-1dyi,j=new_grayi+1,j-2*new_

6、grayi,j+new_grayi-1,jdi,j=np.sqrt(np.square(dxi,j)+np.square(dyi,j)#圖像梯度幅值作為圖像強(qiáng)度值#di,j=np.sqrt(np.square(dxi,j)+np.square(dyi,j)+np.square(dx2i,j)+np.square(dy2i,j)#圖像梯度幅值作為圖像強(qiáng)度值plt.imshow(d,cmap=gray)setp3.非極大值抑制NMSW2,H2=d.shapeNMS=np.copy(d)NMS0,:=NMSW2-1,:=NMS:,0=NMS:,H2-1=0p=0.5foriinrange(1,W2-

7、1):forjinrange(1,H2-1):ifdi,j=0:NMSi,j=0else:gradX=dxi,jgradY=dyi,jgradTemp=di,j#如果Y方向幅度值較大ifnp.abs(gradY)np.abs(gradX):weight=np.abs(gradX)/np.abs(gradY)grad2=di,j+p*(di-1,j-di,j)grad4=di,j+p*(di+1,j-di,j)#如果x,y方向梯度符號(hào)相同ifgradX*gradY0:grad1=di,j-1+p*(di-1,j-1-di,j-1)grad3=di,j+1+p*(di+1,j+1-di,j+1)#

8、如果x,y方向梯度符號(hào)相反else:grad1=di,j+1+p*(di-1,j+1-di,j+1)grad3=di,j-1+p*(di+1,j-1-di,j-1)#如果X方向幅度值較大else:weight=np.abs(gradY)/np.abs(gradX)grad2=di,j+p*(di,j-1-di,j)grad4=di,j+p*(di,j+1-di,j)#如果x,y方向梯度符號(hào)相同ifgradX*gradY0:grad1=di+1,j+p*(di-1,j+1-di+1,j)grad3=di-1,j+p*(di-1,j+1-di-1,j)#如果x,y方向梯度符號(hào)相反else:grad

9、1=di-1,j+p*(di-1,j-1-di-1,j)grad3=di+1,j+p*(di+1,j+1-di+1,j)gradTemp1=weight*p*grad1+(1-weight*p)*grad2gradTemp2=weight*p*grad3+(1-weight*p)*grad4ifgradTemp=gradTemp1andgradTemp=gradTemp2:NMSi,j=gradTempelse:NMSi,j=0#plt.imshow(NMS,cmap=gray)#hist=cv2.calcHist(NMS,0,None,256,0,256)#hist=cv2.calcHist

10、(NMS,0,None,256,0,256)#util.image_read(NMS)arr=NMS.flatten()arrs=foriinarr:ifi!=0andi!=255:arrs.append(i)#arrs=arrprint(hk,NMS.shape)n,bins,patches=plt.hist(arrs,bins=256,normed=1,facecolor=green,alpha=0.75)a,b=pre.OTSU(arrs)print(a,b)plt.show()#print(arr)#step4.雙閾值算法檢測(cè)、連接邊緣W3,H3=NMS.shapeDT=np.zero

11、s(W3,H3)#定義高低閾值TL=0.15*np.max(NMS)TH=0.3*np.max(NMS)print(叮HTH,TH)TL=(2/3)*bTH=bforiinrange(1,W3-1):forjinrange(1,H3-1):if(NMSi,jTH):DTi,j=255elif(NMSi-1,j-1:j+1TH).any()or(NMSi+1,j-1:j+1).any()or(NMSi,j-1,j+1best_M:best_M=M;best_k=k;returnbest_M,best_kfromskimageimportdata,exposure,img_as_floatdefg

12、et_image(path):#獲取圖片img=cv.imread(path)gray=cv.cvtColor(img,cv.C0L0R_BGR2GRAY)returnimg,graydefsmothing(gray):#均衡化gray=exposure.adjust_gamma(gray,0.8)img1=cv.equalizeHist(gray)img1=cv.equalizeHist(img1)aussian=cv.GaussianBlur(img1,(5,5),1)dst=cv.medianBlur(aussian,5)#dst=cv.medianBlur(dst,7)#dst=min

13、.max_min_valueilter(dst,ksize=2,mode=2)#dst=min.fillHole(dst)”銳化”#kernel=np.array(0,-1,0,-1,5,-1,0,-1,0,np.float32)#銳化#dst=cv.filter2D(dst,-1,kernel=kernel)#blurred=cv2.GaussianBlur(gray,(3,3),0)returndstdefThresh_and_blur(gray,gradient):defThresh_and_blur(gray,gradient):#blurred=cv2.GaussianBlur(gr

14、adient,(5,5),0)#(_,thresh)=cv2.threshold(blurred,0,255,cv2.THRESH_BINARY)#otsuM,k=OTSU(gradient)print(M,k)ret,thresh=cv.threshold(gray,k,255,cv.THRESH_BINARY)returnthreshdefimage_morphology(thresh):#建立一個(gè)橢圓核函數(shù)kernel=cv.getStructuringElement(cv.MORPH_ELLIPSE,(3,3)thresh=cv.dilate(thresh,kernel,iterations=1)closed=cv.erode(thresh,kernel,iterations=2)#腐蝕#closed=cv.morphologyEx(closed,cv.MORPH_ELLIPSE,kernel)opening=cv.mor

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論