Changeset 6702


Ignore:
Timestamp:
07/15/10 15:14:08 (9 years ago)
Author:
melissa
Message:
  • Fixed ROI retrieval logic in ImageJ import plugin.
  • Updated FV1000 reader to populate Image --> ROI link.
Location:
trunk/components
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/components/bio-formats/src/loci/formats/in/FV1000Reader.java

    r6655 r6702  
    10461046          if (shape == 0) { 
    10471047            nextROI++; 
     1048 
     1049            String roiID = MetadataTools.createLSID("ROI", nextROI); 
     1050            store.setROIID(roiID, nextROI); 
     1051            store.setImageROIRef(roiID, 0, nextROI); 
    10481052          } 
    10491053 
  • trunk/components/bio-formats/src/loci/formats/readers.txt

    r6690 r6702  
    8282loci.formats.in.MolecularImagingReader # stp 
    8383loci.formats.in.CellWorxReader        # pnl, htd 
     84loci.formats.in.CRIReader             # im3 
    8485loci.formats.in.FakeReader            # fake 
    8586 
  • trunk/components/loci-plugins/src/loci/plugins/util/ROIHandler.java

    r6588 r6702  
    3737import java.awt.Rectangle; 
    3838 
    39 import loci.formats.meta.MetadataRetrieve; 
     39import loci.formats.meta.IMetadata; 
    4040import loci.formats.meta.MetadataStore; 
     41import loci.formats.ome.OMEXMLMetadata; 
     42 
     43import ome.xml.model.Ellipse; 
     44import ome.xml.model.Image; 
     45import ome.xml.model.OME; 
     46import ome.xml.model.Point; 
     47import ome.xml.model.Polyline; 
     48import ome.xml.model.Shape; 
     49import ome.xml.model.Union; 
    4150 
    4251// TODO: Stored ROIs are not correctly linked to Image. 
     
    5867 
    5968  /** 
    60    * Look for ROIs in the given MetadataRetrieve; if any are present, apply 
     69   * Look for ROIs in the given OMEXMLMetadata; if any are present, apply 
    6170   * them to the given images and display them in the ROI manager. 
    6271   */ 
    63   public static void openROIs(MetadataRetrieve retrieve, ImagePlus[] images) { 
     72  public static void openROIs(IMetadata retrieve, ImagePlus[] images) { 
     73    if (!(retrieve instanceof OMEXMLMetadata)) return; 
    6474    int nextRoi = 0; 
    6575    RoiManager manager = RoiManager.getInstance(); 
    6676 
     77    OME root = (OME) retrieve.getRoot(); 
     78 
    6779    int imageCount = retrieve.getImageCount(); 
    68     for (int image=0; image<imageCount; image++) { 
    69       // TODO : technically incorrect to apply every ROI to every image; 
    70       // we should use getROIRefCount(image) instead 
    71       int roiCount = retrieve.getROICount(); 
     80    for (int imageNum=0; imageNum<imageCount; imageNum++) { 
     81      Image image = root.getImage(imageNum); 
     82      int roiCount = image.sizeOfLinkedROIList(); 
    7283      if (roiCount > 0 && manager == null) { 
    7384        manager = new RoiManager(); 
    7485      } 
    7586      for (int roiNum=0; roiNum<roiCount; roiNum++) { 
    76         int shapeCount = 1; 
    77         //int shapeCount = retrieve.getShapeCount(image, roiNum); 
     87        Union shapeSet = image.getLinkedROI(roiNum).getUnion(); 
     88        int shapeCount = shapeSet.sizeOfShapeList(); 
    7889 
    7990        for (int shape=0; shape<shapeCount; shape++) { 
    80           // determine the ROI type 
    81           Double ellipse = retrieve.getEllipseX(roiNum, shape); 
    82           Double line = retrieve.getLineX1(roiNum, shape); 
    83           Double point = retrieve.getPointX(roiNum, shape); 
    84           String polyline = retrieve.getPolylinePoints(roiNum, shape); 
    85           Double rectangle = retrieve.getRectangleX(roiNum, shape); 
     91          Shape shapeObject = shapeSet.getShape(shape); 
    8692 
    8793          Roi roi = null; 
    8894 
    89           if (ellipse != null) { 
    90             int cx = retrieve.getEllipseX(roiNum, shape).intValue(); 
    91             int cy = retrieve.getEllipseY(roiNum, shape).intValue(); 
    92             int rx = retrieve.getEllipseRadiusX(roiNum, shape).intValue(); 
    93             int ry = retrieve.getEllipseRadiusY(roiNum, shape).intValue(); 
     95          if (shapeObject instanceof Ellipse) { 
     96            Ellipse ellipse = (Ellipse) shapeObject; 
     97            int cx = ellipse.getX().intValue(); 
     98            int cy = ellipse.getY().intValue(); 
     99            int rx = ellipse.getRadiusX().intValue(); 
     100            int ry = ellipse.getRadiusY().intValue(); 
    94101            roi = new OvalRoi(cx - rx, cy - ry, rx * 2, ry * 2); 
    95102          } 
    96           else if (line != null) { 
    97             int x1 = retrieve.getLineX1(roiNum, shape).intValue(); 
    98             int x2 = retrieve.getLineX2(roiNum, shape).intValue(); 
    99             int y1 = retrieve.getLineY1(roiNum, shape).intValue(); 
    100             int y2 = retrieve.getLineY2(roiNum, shape).intValue(); 
     103          else if (shapeObject instanceof ome.xml.model.Line) { 
     104            ome.xml.model.Line line = (ome.xml.model.Line) shapeObject; 
     105            int x1 = line.getX1().intValue(); 
     106            int x2 = line.getX2().intValue(); 
     107            int y1 = line.getY1().intValue(); 
     108            int y2 = line.getY2().intValue(); 
    101109            roi = new Line(x1, y1, x2, y2); 
    102110          } 
    103           else if (point != null) { 
    104             int x = retrieve.getPointX(roiNum, shape).intValue(); 
    105             int y = retrieve.getPointY(roiNum, shape).intValue(); 
     111          else if (shapeObject instanceof Point) { 
     112            Point point = (Point) shapeObject; 
     113            int x = point.getX().intValue(); 
     114            int y = point.getY().intValue(); 
    106115            roi = new OvalRoi(x, y, 0, 0); 
    107116          } 
    108           else if (polyline != null) { 
    109             String points = retrieve.getPolylinePoints(roiNum, shape); 
     117          else if (shapeObject instanceof Polyline) { 
     118            Polyline polyline = (Polyline) shapeObject; 
     119            String points = polyline.getPoints(); 
    110120            int[][] coordinates = parsePoints(points); 
    111             boolean closed = retrieve.getPolylineClosed(roiNum, shape); 
     121            boolean closed = polyline.getClosed(); 
    112122            roi = new PolygonRoi(coordinates[0], coordinates[1], 
    113123              coordinates[0].length, closed ? Roi.POLYGON : Roi.POLYLINE); 
    114124          } 
    115           else if (rectangle != null) { 
    116             int x = retrieve.getRectangleX(roiNum, shape).intValue(); 
    117             int y = retrieve.getRectangleY(roiNum, shape).intValue(); 
    118             int w = retrieve.getRectangleWidth(roiNum, shape).intValue(); 
    119             int h = retrieve.getRectangleHeight(roiNum, shape).intValue(); 
     125          else if (shapeObject instanceof ome.xml.model.Rectangle) { 
     126            ome.xml.model.Rectangle rectangle = 
     127              (ome.xml.model.Rectangle) shapeObject; 
     128            int x = rectangle.getX().intValue(); 
     129            int y = rectangle.getY().intValue(); 
     130            int w = rectangle.getWidth().intValue(); 
     131            int h = rectangle.getHeight().intValue(); 
    120132            roi = new Roi(x, y, w, h); 
    121133          } 
     
    123135          if (roi != null) { 
    124136            Roi.setColor(Color.WHITE); 
    125             roi.setImage(images[image]); 
    126             manager.add(images[image], roi, nextRoi++); 
     137            roi.setImage(images[imageNum]); 
     138            manager.add(images[imageNum], roi, nextRoi++); 
    127139          } 
    128140        } 
Note: See TracChangeset for help on using the changeset viewer.