Как обрезать мульти-ROI как изображения в DM с помощью скрипта?

Я хотел бы обрезать эти две области интереса как два изображения:

введите здесь описание изображения

Я думаю обрезать эти два ROI синхронно с помощью скрипта, я нашел код о создании изображения из ROI от DRG Mitchell. Итак, я написал это:

image front := GetFrontImage()
imagedisplay imgdisp = front.ImageGetImageDisplay(0)
number roinum = imgdisp.ImageDisplayCountRois()
number x

for (x=0; x<roinum; x++)
{
roidisp = ImageDisplayGetROI(imgdisp,x)
image crop = front []
ShowImage(crop)
}

Но на самом деле это работает только для одного ROI. Буду признателен, если вы подскажете, как работать с кадрированием более чем одной области интереса. Спасибо!


person Joey Wei    schedule 14.07.2016    source источник
comment
Вы находитесь на правильном пути со своим скриптом, но когда вы получите свой ROI (как объект типа ROI, вам нужно его использовать. Последние две строки в вашем for-цикле полностью не зависят от ROI. См. мой пример ниже. Это простая кодовая нотация с использованием [] для адресации областей, выделенных самой доступной прямоугольной изменяющейся областью интереса.   -  person BmyGuest    schedule 14.07.2016


Ответы (1)


Этот пример должен помочь вам:

// ROIs are objects of the image display, so get that one first
Image input := GetFrontImage()
ImageDisplay disp = input.ImageGetImageDisplay(0)

// Iterate over all ROIs found on the display
number nRoi = disp.ImageDisplayCountROIs()
for (number i=0; i<nRoi; i++ )
{
    ROI myRoi = disp.ImageDisplayGetROI( i )

    // Test if the ROI has the properties you want
    if ( !myROI.ROIIsRectangle() )  continue
    if ( !myROI.ROIGetVolatile() )  continue

    // Read the ROI region and use that to copy the data
    number t, l, b, r 
    myROI.ROIGetRectangle( t, l, b, r )

    // Use slice2 to address the area and ImageClone to get a clone
    // inclusing tags, calibration etc.
    image cut := input.Slice2(t,l,0, 0,(r-l),1, 1,(b-t),1 ).ImageClone()
    cut.ShowImage()

    // Optionally set some names
    cut.SetName( input.GetName()+" #"+(i+1) )

    // Optionally modify the roi
    myRoi.ROISetVolatile( 0 )
    myRoi.ROISetMoveable( 0 )
    myRoi.ROISetLabel( "cut #"+(i+1) )
}
person BmyGuest    schedule 14.07.2016
comment
Большое спасибо! Это работает хорошо! Извините за поздний ответ. - person Joey Wei; 10.08.2016