////////////////////////////////////////////// //Script to get the spectra on separated ROI// // K. Urita Dec. 2021 // // urita@nagasaki-u.ac.jp // // version 1.0 // ////////////////////////////////////////////// image SI if ( !GetFrontImage(SI) ) exit(0) if ( 3 != ImageGetNumDimensions(SI) ) exit(0) ImageDisplay disp = ImageGetImageDisplay( SI, 0 ) while ( 0 < disp.ImageDisplayCountROIs() ) { ROI r = disp.ImageDisplayGetROI( 0 ) Disp.ImageDisplayDeleteROI( r ) } number sx, sy, sz Get3DSize( SI, sx, sy, sz ) number nx, ny, px, py, dx, dy, rx, ry, ix, iy, mx, my //sx, sy: scale //nx, ny: division N //px, py: pixel size for each area //dx, dy: maximum rx, ry if ( !GetNumber( "Enter division number of X (scale: " + sx + "/" + sy + "):", 2, nx ) ) exit(0) if ( !GetNumber( "Enter division number of Y (scale: " + sx + "/" + sy + "):", 2, ny ) ) exit(0) px = floor( sx/nx ) py = floor( sy/ny ) dx = sx - px dy = sy - py mx = 0 Result ("\n" + px + ", " + py + ", " + dx + ", " + dy) //SetSelection( SI, 0, 0, py, px ) for ( number rx = 0; rx <= dx; rx = rx + px ) //rx: intial point of ROI { mx++ my = 0 for ( number ry = 0; ry <= dy; ry = ry + py ) { my++ image spectrum := ImageClone( Slice1 ( SI, 0, 0, 0, 2,sz,1 ) ) spectrum *= 0 /////Adding ROI in image//// ROI marker = NewROI() ROISetVolatile( marker, 0 ) ROISetLabel( marker, (mx + "/" + my) ) ROISetColor( marker, 0, 1, 0 ) ROISetRectangle( marker, ry, rx, ry+py, rx+px ) ImageDisplayAddROI( disp, marker ) /////////////////////////// for ( number ix = rx; ix <= rx + px - 1; ix++ ) { for ( number iy = ry; iy <= ry + py - 1; iy++ ) { spectrum += Slice1( SI, ix,iy,0, 2,sz,1 ) } } SetName( spectrum, "Spec [" + mx + "," + my + "]" ) ShowImage( spectrum ) } }