def generate_r_image(imp, ring_rois, centres, unwrap_axis, threshold_val): """for each point in the projection, calculate the distance to the vessel axis and present as an image""" fp = imp.getProcessor() fp.setThreshold(threshold_val, fp.maxValue(), FloatProcessor.NO_LUT_UPDATE) bp = fp.createMask() bp.dilate() bp.erode() mask_imp = ImagePlus("Mask", bp) tile_mask = make_tiled_imp(mask_imp) #tile_mask.show(); #WaitForUserDialog("pasue - generated mask").show(); mask_imp = do_unwrap(tile_mask, unwrap_axis, imp_title=mask_imp.getTitle()) #mask_imp.show(); roi = PolygonRoi([x for (x, y) in unwrap_axis], [y for (x, y) in unwrap_axis], PolygonRoi.POLYLINE) mask_imp.setRoi(roi) #WaitForUserDialog("pasue - unwrapped").show(); IJ.run(mask_imp, "Fill Holes", "") #WaitForUserDialog("pasue - filled holes").show(); IJ.run(mask_imp, "Divide...", "value=255") #WaitForUserDialog("pasue - scaled to 0-1").show(); #mask_imp.show(); r_list = [] for lidx, (roi, centre) in enumerate(zip(ring_rois, centres)): r_sublist = [ math.sqrt((x - centre[0])**2 + (y - centre[1])**2) for x, y in zip(roi.getPolygon().xpoints, roi.getPolygon().ypoints) ] r_list.append(r_sublist) r_imp = ImagePlus("Radii", FloatProcessor([list(x) for x in zip(*r_list)])) tile_r_imp = make_tiled_imp(r_imp) r_imp = do_unwrap(tile_r_imp, unwrap_axis, imp_title=r_imp.getTitle()) r_imp = ImageCalculator().run("Multiply create", r_imp, mask_imp) IJ.run(r_imp, "Cyan Hot", "") return r_imp, mask_imp
def getPolygon(self): xPoints, yPoints = self.getLine() newRoi = PolygonRoi(xPoints, yPoints, Roi.POLYLINE) return newRoi.getPolygon()