package Ġto mas vol ker . num er iko . sandbox . image Ċ Ċ import Ġto mas vol ker . num er iko . core . dsl . I Ċ import Ġto mas vol ker . num er iko . core . interfaces . array 2 d . double . Double Array 2 D Ċ import Ġto mas vol ker . num er iko . core . interfaces . array 2 d . generic . Array 2 D Ċ import Ġto mas vol ker . num er iko . core . interfaces . array 2 d . generic . forEach Index Ċ import Ġto mas vol ker . num er iko . core . interfaces . array nd . double . Double Array ND Ċ import Ġto mas vol ker . num er iko . core . interfaces . factory . array 2 D Ċ import Ġto mas vol ker . num er iko . core . interfaces . factory . double Array 2 D Ċ import Ġto mas vol ker . num er iko . core . interfaces . factory . double Array ND Ċ import Ġjava . awt . image . Buffered Image Ċ import Ġjava . io . File Ċ import Ġjavax . image io . Image IO Ċ import Ġkotlin . math . round ToInt Ċ Ċ val ĠInt . alpha : ĠInt Ġget () Ġ= Ġ( this Ġand Ġ 0 x 0 0 FFFFFF . inv ()) Ġshr Ġ 2 4 Ċ val ĠInt . red Ġ Ġ: ĠInt Ġget () Ġ= Ġ( this Ġand Ġ 0 x 0 0 FF 0 0 0 0 ) Ġshr Ġ 1 6 Ċ val ĠInt . green : ĠInt Ġget () Ġ= Ġ( this Ġand Ġ 0 x 0 0 0 0 FF 0 0 ) Ġshr Ġ 8 Ċ val ĠInt . blue Ġ: ĠInt Ġget () Ġ= Ġ( this Ġand Ġ 0 x 0 0 0 0 0 0 FF ) Ċ Ċ fun Ġrgb ( red : ĠInt , Ġgreen : ĠInt , Ġblue : ĠInt ): ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġ( red Ġshl Ġ 1 6 ) Ġor Ġ( green Ġshl Ġ 8 ) Ġor Ġblue Ċ Ċ fun Ġsave Gray Scale ( imag : ĠDouble Array 2 D , Ġfile : ĠFile , Ġformat : ĠString Ġ= Ġ" png ") Ġ{ ĊĊĠĠĠ Ġval Ġmin Ġ= Ġimag . min () Ġ?: Ġ 0 . 0 ĊĠĠĠ Ġval Ġmax Ġ= Ġimag . max () Ġ?: Ġ 1 . 0 ĊĊĠĠĠ Ġval Ġrange Ġ= Ġmax Ġ- Ġmin ĊĊĠĠĠ Ġval Ġimage Ġ= ĠBufferedImage ( imag . shape 1 , Ġimag . shape 0 , ĠBufferedImage . TYPE _ INT _ RGB ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġimag . forEach Index Ġ{ Ġy , Ġx Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgray Ġ= Ġ( 2 5 5 Ġ* Ġ( imag [ y , Ġx ] Ġ- Ġmin ) Ġ/ Ġrange ). round ToInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset RGB ( x , Ġy , Ġrgb ( gray , Ġgray , Ġgray )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠImage IO . write ( image , Ġformat , Ġfile ) Ċ } Ċ Ċ fun ĠBufferedImage . toDouble Array 2 D (): ĠDouble Array 2 D Ġ= ĊĠĠĠĠĠĠĠ Ġdouble Array 2 D ( height , Ġwidth ) Ġ{ Ġy , Ġx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrgb Ġ= Ġget RGB ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( rgb . red Ġ+ Ġrgb . green Ġ+ Ġrgb . blue ) Ġ/ Ġ( 3 . 0 Ġ* Ġ 2 5 5 . 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊ Ċ fun ĠBufferedImage . to Boolean Array 2 D (): ĠArray 2 D < Boolean > Ġ= ĊĠĠĠĠĠĠĠ Ġarray 2 D ( height , Ġwidth ) Ġ{ Ġy , Ġx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrgb Ġ= Ġget RGB ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( rgb . red Ġ+ Ġrgb . green Ġ+ Ġrgb . blue ) Ġ/ Ġ( 3 . 0 Ġ* Ġ 2 5 5 . 0 ) Ġ> Ġ 0 . 5 ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ fun ĠBufferedImage . toDouble Array RGB (): ĠDouble Array ND Ġ= ĊĠĠĠĠĠĠĠ Ġdouble Array ND ( I [ height , Ġwidth , Ġ 3 ]) Ġ{ Ġ( y , Ġx , Ġc ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrgb Ġ= Ġget RGB ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( c ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġrgb . red ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġrgb . green ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġrgb . blue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/ Ġ 2 5 5 . 0 ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ fun ĠBufferedImage . toDouble Array RGBA (): ĠDouble Array ND Ġ= ĊĠĠĠĠĠĠĠ Ġdouble Array ND ( I [ height , Ġwidth , Ġ 4 ]) Ġ{ Ġ( y , Ġx , Ġc ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrgb Ġ= Ġget RGB ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( c ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġrgb . red ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġrgb . green ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġrgb . blue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġrgb . alpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ/ Ġ 2 5 5 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊ Ċ fun Ġload Gray Scale Image ( file : ĠFile ): ĠDouble Array 2 D Ġ= ĊĠĠĠĠĠĠĠ ĠImage IO . read ( file ). toDouble Array 2 D () Ċ Ċ fun Ġload RGB Image ( file : ĠFile ): ĠDouble Array ND Ġ= ĊĠĠĠĠĠĠĠ ĠImage IO . read ( file ). toDouble Array RGB () Ċ Ċ fun Ġload RGBA Image ( file : ĠFile ): ĠDouble Array ND Ġ= ĊĠĠĠĠĠĠĠ ĠImage IO . read ( file ). toDouble Array RGBA () Ċ Ċ fun Ġload Gray Scale Image ( path : ĠString ): ĠDouble Array 2 D Ġ= ĊĠĠĠĠĠĠĠ Ġload Gray Scale Image ( File ( path )) Ċ Ċ fun Ġload RGB Image ( path : ĠString ): ĠDouble Array ND Ġ= ĊĠĠĠĠĠĠĠ Ġload RGB Image ( File ( path )) Ċ Ċ fun Ġload RGBA Image ( path : ĠString ): ĠDouble Array ND Ġ= ĊĠĠĠĠĠĠĠ Ġload RGBA Image ( File ( path )) Ċ