
    ii
                        d dl Z d dlZd dlmZ dZ ej                  dej                  z   ej                  e      z  ez        Z
 ej                  e
      Zedd  ej                   ee      dz
  d d      z  Zd Zd Zd Zd-d	Zed
k(  rd dlZ eej*                        dk  r ed        ej.                  d       ej*                  d   Z ede d        eedd      \  ZZ ej6                   ej8                  edddf   e
dddf   z
        d      Z ed ej<                  e      d        ed        ee      D ]  \  Z Z! ede dz    de!d         ejD                  d        ejF                  ddd        e$e      D ]O  Z  ejJ                  eD  cg c]  } | e    	 c}       Z& ejN                  e&jP                  e&jR                  dd       Q  ejT                  e
jP                  e
jR                  ddd !        ejT                  ejP                  ejR                  d"d#d$!        ejV                           ejX                  d%        ejZ                  d&        ejF                  ddd       eD  cg c]G  }  ej<                   ej6                   ej8                  | dddf   e
dddf   z
        d            I c} Z. ejN                  e.        ej^                  d'        ej`                  d(        ejb                  d)        ejX                  d*        ejd                  d+,        ejf                          yyc c} w c c} w ).    N
                  @   c                 6    t        j                  t        |       S N)nppolyvalcoeffszs    :/home/per/Documents/Universal Solver/roots_follow_video.pypoly_valr      s    ::fa      c                 6    t        j                  t        |       S r   )r	   r
   deriv_coeffsr   s    r   
poly_derivr      s    ::lA&&r   c                    t        j                  | t         j                        }|j                  \  }}|ddd|dz  f   j	                         }|dd|dz  df   j	                         }|j	                         }t        ||z
  |      S )zTReturns a complex number: (brightness_left - brightness_right) + i*(mean brightness)N   )cv2cvtColorCOLOR_BGR2GRAYshapemeancomplex)framegrayhwleftright	full_means          r   extract_master_featurer#      s{    <<s112D::DAq5AqD5> DAqDEN!E		I4%<++r   c                 d   t        j                  |       }|j                         st        d|        t	        j
                  dt        j                  z  t        j                  j                  t              z        j                  t        j                        }|j                         g}d}|j                         r||k  r|j                         \  }}|s3|j                  t         j                  d       |j                         \  }}|snt!        |      }	t	        j"                  |	      dkD  rt	        j$                  |	      nd}
|t'        dt	        j"                  |	      dz        z  }t	        j
                  d|
z        }t)        t              D ]\  }||   }t+        |      }t-        |      }d	t	        j.                  |      z  |z  }t	        j0                  |      r*t	        j0                  |      rt	        j0                  |      sFt	        j
                  dt	        j$                  t	        j0                  |      r|nd
      z        ||<   t	        j"                  |      }|dkD  r||z  }nd}t'        ||z  d      }||z  |z  }||z
  }t	        j"                  |      }t	        j0                  |      r|dk  rt	        j
                  d|
z        }nd}d|z
  |z  |||z  z  z   }|||<   _ |j3                  |j                                |dz  }|dz  dk(  rdt	        j4                  t	        j&                  t	        j"                  |d d d f   t6        d d d f   z
        d            }t9        d| d|d       |j                         r||k  r|j;                          ||fS )NzCould not open video: r   r   gư>g        g      ?g      `@y              ?r   y      ?        g-q=y                g?g?g      ?r   d   axiszFrame z, mean error = .4f)r   VideoCaptureisOpenedRuntimeErrorr	   exppirandomrandn_rootsastype
complex128copyreadsetCAP_PROP_POS_FRAMESr#   absangleminranger   r   conjisfiniteappendr   
true_rootsprintrelease)
video_pathalphanum_iterationscapr   historyframe_countretr   master	direction	step_sizephaseiz_ipdpgradgrad_maggrad_dirclipped_stepstepz_i_newradiusradial_blenderrs                             r   solve_roots_with_videorY   '   s   


:
&C<<>3J<@AA 	rBEEzBIINN7334;;BMMJAvvxjGK
,,.[>9XXZ
UGGC++Q/JC (. )+v(=BHHV$3	CRVVF^e%;<<	rI~& w 	AA$CACBrwwqz>B&DKKNr{{22;;t;Lvvb2882;;s3CC#TTU!vvd|H%(?% y83T:L%'(2DDjG VVG_F;;v&&5.&&i0"-8<7U[K[;\\AaD=	B 	qvvx q !''"&&!T'
Za5H(H!IPQRSCF;-s3i@Au ,,.[>9x KKMg:r   __main__r   z-Usage: python roots_follow_video.py video.mp4zProcessing z...g{Gzt?i  )rB   rC   r&   z
Final mean error: z.6fzFinal roots:z  z: r(   )      )figsizeg333333?g?)rB   	linewidthredoz
True roots)cmarkerlabelbluexzFinal estimatesz!Root trajectories guided by videoequallogzFrame numberzMean error (log scale)z*Convergence driven by video master featureg333333?)rB   )g{Gz?i  )4r   numpyr	   matplotlib.pyplotpyplotpltr0   r,   r-   aranger>   polyr   lenr   r   r   r#   rY   __name__sysargvr?   exitrA   final_rootsrE   r9   r7   errorsr   	enumeraterL   rfiguresubplotr:   arraytrajplotrealimagscatterlegendtitler'   errors_over_timeyscalexlabelylabelgridshow)r   s   0r   <module>r      s2   
  
 RVVBJ7!33g=>

 
	cr{YRYYs6{Q2>>!',HZ z
388}q=>!J	K
|3
'(1*EZ^_K RVVFBFF;q$w/*T1W2EEFQOF	  5
67	.+& #11Q3%r!C!"# CJJvCKK!A7^ Arxxw/!1/0DIISC@A CKK
E#\ZCKK  +"2"2fSPabCJJLCII12CHHWCKK!Acjk^_vrvva4j:dAg;N.N'OVW XYkCHHCJJuCJJ~CJJ'(CII:;CHH3CHHJK * 0 ls   'M
	AM