def _doMorph(self):
        """Apply a gaussian blur and then a tophat."""
        tophatKernel = im.makeCircularKernel(self._featureRadius)

        morphed = []
        for image in self._images:
            scaled = im.forceRange(image, 0.0, 1.0) # scale pixel values to 0-1
            blurred = cv2.GaussianBlur(scaled, (0, 0), self._blurSigma)
            tophat = cv2.morphologyEx(blurred, cv2.MORPH_TOPHAT, tophatKernel)
            # maximize contrast by forcing the range to be 0-1 again
            morphed.append(im.forceRange(tophat, 0.0, 1.0))

        self._morphed = morphed
    def run(self):
        images = self._import(im.LoadImages, "images")
        ellipses = self._import(pt.FindParticlesViaMorph, "ellipses")
        color = self._param(RENDER_ELLIPSES_COLOR)

        drawn = []
        drawn2 = []
        for image, group in zip(images, pt.groupEllipsesByFrame(ellipses)):
            self.context.debug("Group len={0}", len(group))
            canvas = cv2.imread(".\\Misc\\Base.tif")
            canvas2 = im.toColor(im.forceRange(image, 0, 255))

            for row in group:
                cv2.ellipse(
                    canvas2,
                    tuple(map(int, ellipses[row]["position"])),
                    tuple(map(int, ellipses[row]["axes"])),
                    ellipses[row]["angle"] * _TO_DEGREES,
                    0,
                    360,
                    color,
                    1,
                    cv2.CV_AA,
                    0,
                )
                cv2.ellipse(
                    canvas,
                    tuple(map(int, ellipses[row]["position"])),
                    tuple(map(int, ellipses[row]["axes"])),
                    ellipses[row]["angle"] * _TO_DEGREES,
                    0,
                    360,
                    color,
                    1,
                    cv2.CV_AA,
                    0,
                )
            drawn.append(canvas)
            drawn2.append(canvas2)
        self._save(drawn)
        self._render(drawn2)
Example #3
0
 def run(self):
     diffs = self._import(im.ComputeForegroundMasks, "diffs")
     mapping = lambda image: im.forceRange(image*(image > 0), 0, 255)\
                             .astype(np.uint8)
     self._render(diffs, mapping)
    def run(self):
        images = self._import(im.LoadImages, "images")
        ellipses = self._import(pt.FindParticlesViaMorph, "ellipses")
        tracks = self._import(pt.TrackParticles, "tracksrender")

        ellipse_color = self._param(RENDER_ELLIPSES_COLOR)
        N = 200  # np.max(tracks[:]["trackID"])
        HSV_tuples = [(x * 1.0 / N, 0.99, 0.99) for x in range(N)]
        tracks_color = map(lambda x: colorsys.hsv_to_rgb(*x), HSV_tuples)
        # print tracks_color
        arrow_color = self._param(RENDER_TRACKS_COLOR)

        drawn = []
        for image, group_ellipse, group_tracks in zip(
            images, pt.groupEllipsesByFrame(ellipses), pt.groupEllipsesByFrame(tracks)
        ):
            self.context.debug("Ellipse len={0}", len(group_ellipse))
            self.context.debug("Track len={0}", len(group_tracks))
            canvas = im.toColor(im.forceRange(image, 0, 255))

            for row in group_ellipse:
                cv2.ellipse(
                    canvas,
                    tuple(map(int, ellipses[row]["position"])),
                    tuple(map(int, ellipses[row]["axes"])),
                    ellipses[row]["angle"] * _TO_DEGREES,
                    0,
                    360,
                    ellipse_color,
                    1,
                    cv2.CV_AA,
                    0,
                )
            for row in group_tracks:
                angle = tracks[row]["angle"]
                radius = tracks[row]["axes"][0]
                color = tracks_color[int(tracks[row]["trackID"] - 1) % 200]
                color = map(lambda x: 255 * x, color)
                # print int(tracks[row]["trackID"]%200),color
                cv2.ellipse(
                    canvas,
                    tuple(map(int, tracks[row]["position"])),
                    tuple(map(int, [radius, radius])),
                    tracks[row]["angle"] * _TO_DEGREES,
                    0,
                    360,
                    color,
                    2,
                    cv2.CV_AA,
                    0,
                )
                cv2.line(
                    canvas,
                    tuple(map(int, tracks[row]["position"])),
                    tuple(map(int, tracks[row]["position"] + 10 * np.array([math.cos(angle), math.sin(angle)]))),
                    (arrow_color),
                    1,
                    cv2.CV_AA,
                    0,
                )
            drawn.append(canvas)

        self._render(drawn)