For an overview of the ScanImage Roi concept, please review the article Scanfields, ROIs, ROI Groups.For an overview of the RoiGroup and Roi API, please review the article RoiGroup & Roi

# Rotated Rectangle Imaging Scanfield

For imaging with a rectangular scanpattern, ScanImage uses the Scanfield 'RotatedRectangle'. The following paramters define this Scanfield:

 ```hSf = scanimage.mroi.scanfield.fields.RotatedRectangle(); % create an Imaging Scanfield of type RotatedRectangle hSf.pixelResolutionXY = [512,512]; % set [x,y] resolution hSf.centerXY = [0.5,0.5]; % set [x,y] center (in reference coordinate space) hSf.sizeXY = [0.5 0.5]; % set [x,y] size (in reference coordinate space) hSf.rotationDegrees= 0; % set rotation (in reference coordinate space)```

# Pixel Positions in Reference Space

 Review the article ScanImage Coordinate Systems to learn more about the different coordinate spaces used in ScanImage.

Scanfields of type RotatedRectangle have two associated affine matrices that allow coordinate space conversions

• pixelToRefTransfrom - transform pixel coordinates to reference space
• `affine - transform scanfield coordinates to reference space`

 ```hSf = scanimage.mroi.scanfield.fields.RotatedRectangle(); % create an Imaging Scanfield of type RotatedRectangle hSf.pixelResolutionXY = [32,32]; % set [x,y] resolution hSf.centerXY = [0.5,0.5]; % set [x,y] resolution hSf.sizeXY = [0.5,0.5]; % set [x,y] center (in reference coordinate space) hSf.rotationDegrees = 20; % set [x,y] size (in reference coordinate space) pixToRefT = hSf.pixelToRefTransform(); % get affine transform to convert pixel coordinates to reference space sfToRefT = hSf.affine(); % get affine transfrom to convert scanfield coordinates to reference space %% plot pixel coordinates pixelResXY = hSf.pixelResolutionXY; % get scanfield pixel resolution [xx,yy] = meshgrid(1:pixelResXY(1),1:pixelResXY(2)); % create mesh of pixel coordinates [xx_ref,yy_ref] = most.idioms.xformMesh(xx,yy,hSf.pixToRefT); % transform pixel mesh into reference coordinate space % plot meshgrid in reference space hFig = figure(); hAx = axes('Parent',hFig,'XLim',[0,1],'YLim',[0,1],'YDir','reverse','DataAspectRatio',[1,1,1]); line('Parent',hAx,'XData',xx_ref(:),'YData',yy_ref(:),'Color',[0 0.5 1],'LineStyle','none','Marker','.'); %% plot scanfield outline outlinePts = [0 0; 0 1; 1 1; 1 0; 0 0]; outlinePts_ref = most.idioms.xformPoints(outlinePts,sfToRefT); line('Parent',hAx,'XData',outlinePts_ref (:,1),'YData',outlinePts_ref (:,2),'Color','red'); %% plot scanfield center centerPt = [0.5,0.5]; centerPt_ref = most.idioms.xformPoints(centerPt,sfToRefT); line('Parent',hAx,'XData',centerPt_ref(1),'YData',centerPt_ref(2),'Color','red','Marker','x','MarkerSize',10);  ```
 Pixel coordinates within a RotatedRectangle. The pixel coordinates change when the resolution of the scanfield is changed.

# RoiManager

All imaging RoiGroups are managed by the ScanImage component hSI.hRoiManager. This component contains two RoiGroups:

• hSI.hRoiManager
• hSI.hRoiManager.roiGroupDefault (default, used for non-mRoi imaging)
• hSI.hRoiManager.roiGroupMroi (used for mRoi imaging)

hSI.hRoiManager.currentRoiGroup returns one of this roiGroups, depending if hSI.hRoiManager.mroiEnable is set to True or False

 Do not change hSI.hRoiManager.roiGroupDefault directly. The scanfield of this RoiGroup is configured automatically by ScanImage using the following properties in hSI.hRoiManager:hSI.hRoiManager.pixelsPerLinehSI.hRoiManager.linesPerFramehSI.hRoiManager.scanZoomFactorhSI.hRoiManager.scanRotationhSI.hRoiManager.scanAngleMultiplierSlowhSI.hRoiManager.scanAngleMultiplierFasthSI.hRoiManager.scanAngleShiftSlowhSI.hRoiManager.scanAngleShiftFasthSI.hRoiManager.forceSquarePixelationhSI.hRoiManager.forceSquarePixelsUse hSI.hRoiManager.roiGroupDefault.rois(1).scanfields(1) to inspect the current scanning paramters