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