2525from numpy import ma
2626from scipy .signal import convolve2d
2727from numpy import log
28+ import matplotlib .pyplot as plt
2829
2930
3031WINSIZE = 32
@@ -531,23 +532,11 @@ def piv(frame_a, frame_b,
531532 raise (BaseException ,'window size cannot be larger than the image' )
532533
533534 # get field shape
534- n_rows , n_cols = get_field_shape (frame_a .shape , window_size , overlap )
535+ n_rows , n_cols = get_field_shape (frame_a .shape , search_size , overlap )
535536
536537 u = np .zeros ((n_rows , n_cols ))
537538 v = np .zeros ((n_rows , n_cols ))
538- sig2noise = np .zeros ((n_rows , n_cols ))
539-
540- if search_size > window_size :
541- frame_b = np .pad (frame_b , ((search_size - window_size )/ 2 ,
542- (search_size - window_size )/ 2 ),'constant' ,
543- constant_values = (0 ,0 ))
544-
545- # print frame_a.shape, frame_a.dtype, frame_b.shape, frame_b.dtype
546- # fig,ax = plt.subplots(1,2)
547- # ax[0].imshow(frame_a,cmap=plt.cm.gray)
548- # ax[1].imshow(frame_b,cmap=plt.cm.gray)
549- # plt.show()
550- # 'constant',constant_values = 0)
539+ sig2noise = np .zeros ((n_rows , n_cols ))
551540
552541 u , v = np .zeros ((n_rows , n_cols )), np .zeros ((n_rows , n_cols ))
553542
@@ -563,62 +552,44 @@ def piv(frame_a, frame_b,
563552 for m in range (n_cols ):
564553 # range(search_size/2, frame_a.shape[1] - search_size/2 , window_size - overlap ):
565554
566- i = k * (window_size - overlap ) + window_size / 2
567- j = m * (window_size - overlap ) + window_size / 2
568-
569- # print 'center', i,j
570-
571555
572- il = i - window_size / 2
573- jt = j - window_size / 2
574- ir = i + window_size / 2
575- jb = j + window_size / 2
556+ # Select first the largest window, work like usual from the top left corner
557+ # the left edge goes as:
558+ # e.g. 0, (search_size - overlap), 2*(search_size - overlap),....
576559
577- # print 'a', il,ir,jt,jb
578-
579- # il = il if il > 0 else 0
580- # ir = ir if ir < frame_a.shape[0] else frame_a.shape[0]
581- # jt = jt if jt > 0 else 0
582- # jb = jb if jb < frame_a.shape[1] else frame_a.shape[1]
583-
584- window_a = frame_a [il :ir , jt :jb ]
560+ il = k * (search_size - overlap )
561+ ir = il + search_size
585562
586- # now shift the second image center accordingly
587- i += (search_size - window_size )/ 2
588- j += (search_size - window_size )/ 2
589-
590- il = i - search_size / 2
591- ir = i + search_size / 2
592- jt = j - search_size / 2
593- jb = j + search_size / 2
563+ # same for top-bottom
564+ jt = m * (search_size - overlap )
565+ jb = jt + search_size
594566
595- # print 'b', il, ir, jt, jb
596-
597- # il = il if il > 0 else 0
598- # ir = ir if ir < frame_a.shape[0] else frame_a.shape[0]
599- # jt = jt if jt > 0 else 0
600- # jb = jb if jb < frame_a.shape[1] else frame_a.shape[1]
601-
602- window_b = frame_b [il :ir , jt :jb ]
603-
604- # fig,ax = plt.subplots(1,2)
605- # ax[0].imshow(window_a,cmap=plt.cm.gray)
606- # ax[1].imshow(window_b,cmap=plt.cm.gray)
607- # plt.show()
567+ # pick up the window in the second image
568+ window_b = frame_b [il :ir , jt :jb ]
608569
570+ # now shift the left corner of the smaller window inside the larger one
571+ il += (search_size - window_size )// 2
572+ # and it's right side is just a window_size apart
573+ ir = il + window_size
574+ # same same
575+ jt += (search_size - window_size )// 2
576+ jb = jt + window_size
577+
578+ window_a = frame_a [il :ir , jt :jb ]
579+
609580 if np .any (window_a ):
610581 corr = correlate_windows (window_a , window_b ,
611582 corr_method = corr_method ,
612583 nfftx = nfftx , nffty = nffty )
613- # plt.figure()
614- # plt.contourf(corr)
615- # plt.show()
584+ # plt.figure()
585+ # plt.contourf(corr)
586+ # plt.show()
616587 # get subpixel approximation for peak position row and column index
617- row , col = find_subpixel_peak_position (
618- corr , subpixel_method = subpixel_method )
588+ row , col = find_subpixel_peak_position (corr ,
589+ subpixel_method = subpixel_method )
619590
620- row -= (search_size + window_size - 1 )/ 2
621- col -= (search_size + window_size - 1 )/ 2
591+ row -= (search_size + window_size - 1 )// 2
592+ col -= (search_size + window_size - 1 )// 2
622593
623594 # get displacements, apply coordinate system definition
624595 u [k ,m ],v [k ,m ] = - col , row
0 commit comments