Advertisement
Guest User

Untitled

a guest
May 22nd, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.63 KB | None | 0 0
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from scipy import misc as mc
  4.  
  5. img = mc.imread('kolka.png')
  6.  
  7. print img.dtype
  8. print img.shape
  9.  
  10. R = img[:,:,0]
  11. G = img[:,:,1]
  12. B = img[:,:,2]
  13.  
  14. img=R*0.2126+G*0.7152+B*0.0722
  15.  
  16. I1=img
  17.  
  18.  
  19.  
  20. def ffilter(img,mask):
  21.     m=mask.shape[0]
  22.     n=mask.shape[1]
  23.     if np.sum(mask)==0:
  24.         N=1
  25.     else:
  26.         N=np.sum(mask)
  27.     mm=m/2
  28.     if m%2==1:
  29.         mm=mm+1
  30.     nm=n/2
  31.     if n%2==1:
  32.         nm=nm+1
  33.     offsetup=mm-1
  34.     offsetdown=mask.shape[0]-offsetup
  35.     offsetleft=nm-1
  36.     offsetright=mask.shape[1]-offsetleft
  37.     img=powiekszenie(img,mask)
  38.     x=img.shape[0]
  39.     y=img.shape[1]
  40.     for i in range (offsetup,x-offsetdown):
  41.         for j in range (offsetleft,y-offsetright):
  42.             img[i,j]=np.sum(np.multiply(mask,img[i-offsetup+1:i+offsetdown+1,j-offsetleft+1:j+offsetright+1]))
  43.             img[i,j]=img[i,j]/N
  44.     return img
  45.  
  46.    
  47. def powiekszenie(img,mask):
  48.     m=mask.shape[0]
  49.     n=mask.shape[1]
  50.     mm=m/2
  51.     if m%2==1:
  52.         mm=mm+1
  53.     nm=n/2
  54.     if n%2==1:
  55.         nm=nm+1
  56.     offsetup=mm-1
  57.     offsetdown=mask.shape[0]-mm
  58.     if m%2==0:
  59.         offsetdown=offsetdown+1
  60.     offsetleft=nm-1
  61.     offsetright=mask.shape[1]-nm
  62.     if n%2==0:
  63.         offsetright=offsetright+1
  64.     A=np.ones((offsetup,offsetleft))*img[0,0]
  65.     B=np.ones((offsetup,img.shape[1]))
  66.     B=np.multiply(B,img[0,:])
  67.     C=np.ones((offsetup,offsetright))*img[0,img.shape[0]-1]
  68.     D=np.ones((img.shape[0],offsetleft))
  69.     D=np.multiply(D,img[:,0:1:1])
  70.     E=np.ones((img.shape[0],offsetright))
  71.     E=np.multiply(E,img[:,img.shape[1]-1:img.shape[1]:1])
  72.     F=np.ones((offsetdown,offsetleft))*img[img.shape[1]-1,0]
  73.     G=np.ones((offsetdown,img.shape[1]))
  74.     G=np.multiply(G,img[img.shape[0]-1,:])
  75.     H=np.ones((offsetdown,offsetright))*img[img.shape[0]-1,img.shape[1]-1]
  76.     img=np.concatenate((B,img),axis=0)
  77.     CE=np.concatenate((C,E),axis=0)
  78.     img=np.concatenate((img,CE),axis=1)
  79.     AD=np.concatenate((A,D),axis=0)
  80.     img=np.concatenate((AD,img),axis=1)
  81.     FGH=np.concatenate((F,G,H),axis=1)
  82.     img=np.concatenate((img,FGH),axis=0)
  83.     return img
  84.    
  85. def mfilter(img,mask):
  86.     i=mask.shape[0]
  87.     m=mask.shape[0]
  88.     n=mask.shape[1]
  89.     mm=m/2
  90.     if m%2==1:
  91.         mm=mm+1
  92.     nm=n/2
  93.     if n%2==1:
  94.         nm=nm+1
  95.     offsetup=mm-1
  96.     offsetdown=mask.shape[1]-mm
  97.     offsetleft=nm-1
  98.     offsetright=mask.shape[2]-nm
  99.     x=img.shape[0]+offsetup+offsetdown
  100.     y=img.shape[1]+offsetleft+offsetright
  101.     images=np.zeros((x,y))
  102.     for j in range (0,i):
  103.         images=images+abs(ffilter(img,mask[j]))
  104.     return (images/i)
  105.  
  106.  
  107. sobel=np.zeros((4,3,3))
  108. sobel[0,:,:]=np.array([[-1,0,1],[-2,0,2],[-1,0,1]])
  109. sobel[1,:,:]=np.array([[-1,-2,-1],[0,0,0],[1,2,1]])
  110. sobel[2,:,:]=np.array([[0,1,2],[-1,0,1],[-2,-1,0]])
  111. sobel[3,:,:]=np.array([[-2,-1,0],[-1,0,1],[0,1,2]])
  112.  
  113. def kolo(r):
  114.     mask=np.zeros((2*r,2*r))
  115.     m=mask.shape[0]
  116.     n=mask.shape[1]
  117.  
  118.     mm=r-1
  119.     nm=r-1
  120.     for k in range (1,361,1):
  121.         x=np.round(mm+r*np.sin(k)).astype('int')
  122.         y=np.round(nm+r*np.cos(k)).astype('int')
  123.         mask[x,y]=1
  124.        
  125.     return mask
  126.    
  127. def kolofilter(img,mask):
  128.     m=mask.shape[0]
  129.     n=mask.shape[1]
  130.     if np.sum(mask)==0:
  131.         N=1
  132.     else:
  133.         N=np.sum(mask)
  134.     mm=m/2
  135.     if m%2==1:
  136.         mm=mm+1
  137.     nm=n/2
  138.     if n%2==1:
  139.         nm=nm+1
  140.     offsetup=mm-1
  141.     offsetdown=mask.shape[0]-offsetup
  142.     offsetleft=nm-1
  143.     offsetright=mask.shape[1]-offsetleft
  144.     img=kolopowiekszenie(img,mask)
  145.     x=img.shape[0]
  146.     y=img.shape[1]
  147.     for i in range (offsetup,x-offsetdown):
  148.         for j in range (offsetleft,y-offsetright):
  149.             img[i,j]=np.sum(np.multiply(mask,img[i-offsetup+1:i+offsetdown+1,j-offsetleft+1:j+offsetright+1]))
  150.             img[i,j]=img[i,j]/N
  151.     return img
  152.    
  153.    
  154. def kolopowiekszenie(img,mask):
  155.     m=mask.shape[0]
  156.     n=mask.shape[1]
  157.     mm=m/2
  158.     if m%2==1:
  159.         mm=mm+1
  160.     nm=n/2
  161.     if n%2==1:
  162.         nm=nm+1
  163.     offsetup=mm-1
  164.     offsetdown=mask.shape[0]-mm
  165.     if m%2==0:
  166.         offsetdown=offsetdown+1
  167.     offsetleft=nm-1
  168.     offsetright=mask.shape[1]-nm
  169.     if n%2==0:
  170.         offsetright=offsetright+1
  171.     A=np.zeros((offsetup,offsetleft))
  172.     B=np.zeros((offsetup,img.shape[1]))
  173.     C=np.zeros((offsetup,offsetright))
  174.     D=np.zeros((img.shape[0],offsetleft))
  175.     E=np.zeros((img.shape[0],offsetright))
  176.     F=np.zeros((offsetdown,offsetleft))
  177.     G=np.zeros((offsetdown,img.shape[1]))
  178.     H=np.zeros((offsetdown,offsetright))
  179.     img=np.concatenate((B,img),axis=0)
  180.     CE=np.concatenate((C,E),axis=0)
  181.     img=np.concatenate((img,CE),axis=1)
  182.     AD=np.concatenate((A,D),axis=0)
  183.     img=np.concatenate((AD,img),axis=1)
  184.     FGH=np.concatenate((F,G,H),axis=1)
  185.     img=np.concatenate((img,FGH),axis=0)
  186.     return img
  187.    
  188. image=mfilter(I1,sobel)
  189. poProgowaniu = (image[:,:] >= 25).astype('float64')
  190.  
  191.  
  192. def ht(img, rmin, rmax, N):
  193.     m=img.shape[0]
  194.     n=img.shape[1]
  195.     acc=np.zeros((m,n))
  196.     licznik=0
  197.     possible=np.zeros((100,3))
  198.     middle=np.zeros((N,3))
  199.     tempak=np.zeros((m,n))
  200.     for ir in range (rmin,rmax,2):
  201.         temp=kolofilter(img,kolo(ir))
  202.        
  203.         w=np.where(temp*255>=140)
  204.         print w
  205.         print len(w[0][:])
  206.         if len(w[0][:])!=0:
  207.             for x in range (0,len(w[0][:])):
  208.                 possible[licznik,0]=w[0][x]
  209.                 possible[licznik,1]=w[1][x]
  210.                 possible[licznik,2]=temp[w[0][x],w[1][x]]*255
  211.                 licznik=licznik+1
  212.                 tempak[w[0][x],w[1][x]]=1
  213.  
  214.         print ir
  215.     plt.imshow(tempak, cmap=plt.cm.gray)
  216.     plt.show()
  217.     #acc=acc/((rmax-rmin)/2)
  218.     for o in range (0,licznik):
  219.         for s in range (0,N):
  220.             if (possible[o,2]>middle[s,2]):
  221.                 temp=middle[s,0]
  222.                 middle[s,0]=possible[o,0]
  223.                 possible[o,0]=temp
  224.                 temp=middle[s,1]
  225.                 middle[s,1]=possible[o,1]
  226.                 possible[o,1]=temp
  227.                 temp=middle[s,2]
  228.                 middle[s,2]=possible[o,2]
  229.                 possible[o,2]=temp
  230.                
  231.     for d in range (0,N):
  232.         print middle[d,0]
  233.         print middle[d,1]
  234.         print middle[d,2]
  235.         acc[middle[d,0].astype('int'),middle[d,1].astype('int')]=1
  236.        
  237.     return acc
  238.    
  239. plt.subplot(1,2,1)
  240. plt.imshow(poProgowaniu, cmap=plt.cm.gray)
  241. plt.subplot(1,2,2) 
  242. temp=ht(poProgowaniu,14,58,5)
  243. plt.imshow(temp, cmap=plt.cm.gray)
  244. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement