package Ġedu . stanford . cf ull er . image an alys ist ools . filter Ċ Ċ import Ġorg . apache . commons . math 3 . complex . Complex Ċ import Ġorg . apache . commons . math 3 . transform . Fast Four ier Transformer Ċ Ċ import Ġedu . stanford . cf ull er . image an alys ist ools . image . Histogram Ċ import Ġedu . stanford . cf ull er . image an alys ist ools . image . Writable Image Ċ import Ġedu . stanford . cf ull er . image an alys ist ools . image . Image Ċ import Ġedu . stanford . cf ull er . image an alys ist ools . image . Image Coordinate Ċ Ċ /** Ċ Ġ* ĠCon vol ves Ġa Ġ 2 D Ġx - y ĠImage Ġwith Ġa Ġ 2 D Ġkernel . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠBefore Ġcalling Ġapply , Ġthe Ġkernel Ġmust Ġbe Ġspecified Ġusing Ġthe Ġ[. set Kernel ] Ġmethod . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠThis Ġfilter Ġdoes Ġnot Ġuse Ġa Ġreference ĠImage . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠAfter Ġcalling Ġthe Ġapply Ġmethod , Ġthe Ġimage Ġargument Ġto Ġapply Ġwill Ġbe Ġoverwritten Ġby Ġthe Ġcon volved ĠImage . ĊĊ Ġ* Ġ@ author ĠCol in ĠJ . ĠFull er Ċ Ġ*/ Ċ class ĠConvolution Filter Ġ: ĠFilter () Ġ{ ĊĠĠĠ Ġ// ĠTODO : Ġdeal Ġwith Ġboundary Ġconditions Ġof Ġtypes Ġother Ġthan Ġzero . ĊĠĠĠ Ġ// ĠTODO : Ġdeal Ġwith Ġsomething Ġother Ġthan Ġsingle Ġimage Ġplane Ġtransforms . ĊĊĠĠĠ Ġinternal Ġvar Ġk : ĠKernel Ġ= ĠKernel . no Op () ĊĠĠĠ Ġinternal Ġvar Ġtransform Storage : ĠArray < Array < Complex >> ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġapply ( im : ĠWrit able Image ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtf Storage Ġ= Ġthis . transform Storage ĊĠĠĠĠĠĠĠ Ġval Ġtransformed : ĠArray < Array < Complex >> Ġ= Ġif Ġ( tf Storage Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtf Ġ= ĠArray < Array < Complex >>( tf Storage . size ) Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArray < Complex >( tf Storage [ 0 ]. size ) Ġ{ Ġj Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtf Storage [ i ][ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtf ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConvolution Filter . transform ( im , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġkernel Transform Ġ= Ġthis . k . get Trans formed 2 DK ernel ( transformed [ 0 ]. size , Ġtransformed . size ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġtransformed . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġtransformed . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransformed [ i ][ j ] Ġ= Ġtransformed [ i ][ j ]. multiply ( kernel Transform [ i ][ j ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinverse Transform ( im , Ġ 0 , Ġtransformed ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Transform ( transformed : ĠArray < Array < Complex >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . transform Storage Ġ= Ġtransformed ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Kernel ( k : ĠKernel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . k Ġ= Ġk ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinverse Transform ( orig : ĠWrit able Image , Ġz : ĠInt , Ġtransformed : ĠArray < Array < Complex >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcol Major Image Ġ= Ġtransformed ĊĠĠĠĠĠĠĠ Ġval Ġrow Image Ġ= ĠArray ( col Major Image [ 0 ]. size ) Ġ{ ĠDouble Array ( col Major Image . size ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfft Ġ= Ġorg . apache . commons . math 3 . transform . Fast Four ier Transformer ( org . apache . commons . math 3 . transform . D ft Normalization . STANDARD ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġcol Major Image . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcol Major Image [ c ] Ġ= Ġfft . transform ( col Major Image [ c ], Ġorg . apache . commons . math 3 . transform . Transform Type . IN VERSE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtemp Row Ġ= ĠarrayOf Null s < Complex >( row Image . size ) ĊĊĠĠĠĠĠĠĠ Ġ// also Ġcalculate Ġmin / max Ġvalues ĊĠĠĠĠĠĠĠ Ġvar Ġnew Min Ġ= Ġjava . lang . Double . MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġvar Ġnew Max Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( r Ġin Ġrow Image . indices ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġcol Major Image . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Row [ c ] Ġ= Ġcol Major Image [ c ][ r ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransformed Row Ġ= Ġfft . transform ( temp Row , Ġorg . apache . commons . math 3 . transform . Transform Type . IN VERSE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġcol Major Image . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow Image [ r ][ c ] Ġ= Ġtransformed Row [ c ]. abs () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( row Image [ r ][ c ] Ġ< Ġnew Min ) Ġnew Min Ġ= Ġrow Image [ r ][ c ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( row Image [ r ][ c ] Ġ> Ġnew Max ) Ġnew Max Ġ= Ġrow Image [ r ][ c ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// re scale Ġvalues Ġto Ġsame Ġmin / max Ġas Ġbefore ĊĊĠĠĠĠĠĠĠ Ġval Ġh Ġ= ĠHistogram ( orig ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġold Min Ġ= Ġh . min Value . toDouble () ĊĠĠĠĠĠĠĠ Ġval Ġold Max Ġ= Ġh . max Value . toDouble () ĊĊĠĠĠĠĠĠĠ Ġvar Ġscale Factor Ġ= Ġ( old Max Ġ- Ġold Min ) Ġ/ Ġ( new Max Ġ- Ġnew Min ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmin Coord Ġ= ĠImage Coordinate . create Coord XYZ CT ( 0 , Ġ 0 , Ġz , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġmax Coord Ġ= ĠImage Coordinate . clone Coord ( orig . dimension Sizes ) ĊĠĠĠĠĠĠĠ Ġmax Coord [ Image Coordinate . Z ] Ġ= Ġz Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġorig . set Box Of Interest ( min Coord , Ġmax Coord ) ĊĊĠĠĠĠĠĠĠ Ġscale Factor Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠ Ġold Min Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( ic Ġin Ġorig ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorig . setValue ( ic , Ġ(( row Image [ ic [ Image Coordinate . Y ]][ ic [ Image Coordinate . X ]] Ġ- Ġnew Min ) Ġ* Ġscale Factor Ġ+ Ġold Min ). toFloat ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġorig . clear Box Of Interest () ĊĠĠĠĠĠĠĠ Ġmin Coord . recycle () ĊĠĠĠĠĠĠĠ Ġmax Coord . recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġtransform ( im : ĠImage , Ġz : ĠInt ): ĠArray < Array < Complex >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfft Ġ= Ġorg . apache . commons . math 3 . transform . Fast Four ier Transformer ( org . apache . commons . math 3 . transform . D ft Normalization . STANDARD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy dim Pow Of Two Ġ= Ġim . dimension Sizes [ Image Coordinate . Y ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġx dim Pow Of Two Ġ= Ġim . dimension Sizes [ Image Coordinate . X ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! org . apache . commons . math 3 . util . Arithmetic Utils . is Power Of Two ( y dim Pow Of Two . to Long ()) Ġ|| Ġ! org . apache . commons . math 3 . util . Arithmetic Utils . is Power Of Two ( xd im Pow Of Two . to Long ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx dim Pow Of Two Ġ= ĠMath . pow ( 2 . 0 , ĠMath . ceil ( Math . log ( im . dimension Sizes [ Image Coordinate . X ]. toDouble ()) Ġ/ ĠMath . log ( 2 . 0 ))). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy dim Pow Of Two Ġ= ĠMath . pow ( 2 . 0 , ĠMath . ceil ( Math . log ( im . dimension Sizes [ Image Coordinate . Y ]. toDouble ()) Ġ/ ĠMath . log ( 2 . 0 ))). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġz ĊĠĠĠĠĠĠĠĠĠĠĠ Ġim . select Plane ( p ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow Image Ġ= ĠArray ( y dim Pow Of Two ) Ġ{ ĠDouble Array ( xd im Pow Of Two ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. y dim Pow Of Two Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava . util . Arrays . fill ( row Image [ i ], Ġ 0 . 0 ) Ġ// Ġensures Ġzero - padding ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ic Ġin Ġim ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow Image [ ic [ Image Coordinate . Y ]][ ic [ Image Coordinate . X ]] Ġ= Ġim . getValue ( ic ). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcol Major Image Ġ= ĠArray < Array < Complex >>( xd im Pow Of Two ) Ġ{ ĠArray < Complex >( y dim Pow Of Two , Ġ{ ĠComplex ( 0 . 0 , Ġ 0 . 0 ) Ġ}) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( r Ġin Ġrow Image . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow Ġ= Ġrow Image [ r ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransformed Row Ġ= Ġfft . transform ( row , Ġorg . apache . commons . math 3 . transform . Transform Type . FORWARD ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġcol Major Image . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol Major Image [ c ][ r ] Ġ= Ġtransformed Row [ c ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġcol Major Image . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol Major Image [ c ] Ġ= Ġfft . transform ( col Major Image [ c ], Ġorg . apache . commons . math 3 . transform . Transform Type . FORWARD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcol Major Image ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ