IDL ——PRO programROISelection
- 格式:doc
- 大小:30.50 KB
- 文档页数:2
PRO programROISelection
; 准备显示器.
DEVICE, DECOMPOSED = 0, RETAIN = 2
LOADCT, 0
; 选取并打开图象文件夹,获取图象尺寸.
img = READ_PNG(FILEPATH('mineral.png',$
SUBDIRECTORY = ['examples','data']))
dims = SIZE(img, /DIMENSIONS)
;创建一个窗口并显示原图象
WINDOW, 0, XSIZE = dims[0], YSIZE = dims[1]
TVSCL, img,0
; 给图象设定域值以选取初始化的ROI.
threshImg = (img LT 50)
; 去除间隙,使用侵蚀和扩大形态操作应用3x3元素于图象..
strucElem = REPLICATE(1,3,3)
threshImg = ERODE(DILATE(TEMPORARY(threshImg), $
strucElem), strucElem)
; 抽取已域值图象轮廓.
CONTOUR, threshImg, LEVEL = 1, $
XMARGIN = [0, 0], YMARGIN = [0, 0], $
/NOERASE, PATH_INFO = pathInfo, PATH_XY = pathXY, $
XSTYLE = 5, YSTYLE = 5, /PATH_DATA_COORDS
; 在第二个窗口显示原图象.
WINDOW, 2, XSIZE = dims[0], YSIZE = dims[1]
TVSCL, img
; 装载一个离散的颜色表并嵌入日期到一个DLgrROI对象,用DRAW_ROI显示
LOADCT,12
FOR I = 0,(N_ELEMENTS(pathInfo) - 1 ) DO BEGIN
S = [INDGEN(pathInfo(I).N), 0]
oROI = OBJ_NEW('IDLanROI',$
(pathXY(*,pathInfo(I).OFFSET + S ))[0,*], $
(pathXY(*,pathInfo(I).OFFSET + S ))[1,*])
; 绘制每一个设定的域值和轮廓
DRAW_ROI, oROI, COLOR = 80
; 显示时,使用与IMAGE_STATISTICS关联的computeMask获得被区域大量覆盖的像素
maskResult = oROI -> ComputeMask(DIMENSIONS = $
[dims[0], dims[1]])
IMAGE_STATISTICS, img, MASK = maskResult, COUNT = maskArea
; 使用ComputeGeometry获得几何图形区域和每个区域的周长,该区域像素1=
1.2 x 1.2 mm--
ROIStats = oROI -> ComputeGeometry(AREA = geomArea, $
PERIMETER = perimeter, SPATIAL_SCALE = [1.2, 1.2, 1.0])
;当显示时打印每个区域的统计表并在处理下一个区域时等待3秒钟. PRINT, 'Region''s mask area =', FIX(maskArea),' pixels'
PRINT, 'Region''s geometric area =', FIX(geomArea),' mm'
PRINT, 'Region''s perimeter = ', FIX(perimeter),' mm'
PRINT, ' '
WAIT, 3
; 当显示完毕后,删除不需要的参考对象
OBJ_DESTROY, oROI
ENDFOR
END