Пример #1
0
 def testWormIdentification(self):
     plt.figure()
     for i, region in enumerate(self.regions):
         plt.subplot(4, np.ceil(np.float64(self.numberOfRegions)/4.0), i+1)
         ip = self.imageProcessor
         cropped = wp.cropImageToRegion(self.firstFrame, region.cropRegion)
         filtered = ip.applyBackgroundFilter(cropped)
         thresholded = ip.applyThreshold(filtered)
         cleaned = ip.applyMorphologicalCleaning(thresholded)
         # remove ignored areas
         if region.ignoredAreas is not None:
             cleaned[region.ignoredAreas==255] = False
         possibleWorms = ip.identifyPossibleWorms(cleaned)
         if len(possibleWorms) > 0:
             likelyWorm = max(possibleWorms, key=lambda worm: worm[1])
             if likelyWorm is not None:
                 try:
                     wormImage = WormImage(region, filtered, cleaned,
                                           likelyWorm[0])
                     wormImage.measureWorm()
                     wormImage.plot(bodyPtMarkerSize=30)
                     print '{0} {1}: worm {2} um long, {3} um wide'.format(region.strainName,
                                                                          region.wormName,
                                                                          wormImage.length,
                                                                          wormImage.width)
                 except(Exception) as e:
                     Logger.logPrint('Error in {0} {1}: {2}'.format(region.strainName,
                                                          region.wormName,
                                                          str(e)))
         plt.title(region.strainName + ' ' + region.wormName)
     plt.show()
Пример #2
0
 def testWormIdentification(self):
     plt.figure()
     for i, region in enumerate(self.regions):
         plt.subplot(4, np.ceil(np.float64(self.numberOfRegions) / 4.0),
                     i + 1)
         ip = self.imageProcessor
         cropped = wp.cropImageToRegion(self.firstFrame, region.cropRegion)
         filtered = ip.applyBackgroundFilter(cropped)
         thresholded = ip.applyThreshold(filtered)
         cleaned = ip.applyMorphologicalCleaning(thresholded)
         # remove ignored areas
         if region.ignoredAreas is not None:
             cleaned[region.ignoredAreas == 255] = False
         possibleWorms = ip.identifyPossibleWorms(cleaned)
         if len(possibleWorms) > 0:
             likelyWorm = max(possibleWorms, key=lambda worm: worm[1])
             if likelyWorm is not None:
                 try:
                     wormImage = WormImage(region, filtered, cleaned,
                                           likelyWorm[0])
                     wormImage.measureWorm()
                     wormImage.plot(bodyPtMarkerSize=30)
                     print '{0} {1}: worm {2} um long, {3} um wide'.format(
                         region.strainName, region.wormName,
                         wormImage.length, wormImage.width)
                 except (Exception) as e:
                     Logger.logPrint('Error in {0} {1}: {2}'.format(
                         region.strainName, region.wormName, str(e)))
         plt.title(region.strainName + ' ' + region.wormName)
     plt.show()
Пример #3
0
 def defineFoodRegions(self):
     if self.firstFrame is None:
         self.readFirstFrame()
     raw_input("Draw a circle covering the food for each region...")
     for region in self.regions:
         crop = region.cropRegion
         plt.imshow(wp.cropImageToRegion(self.firstFrame, crop), plt.gray())
         plt.title(region.strainName + " " + region.wormName)
         sel = roitools.CircleRegionSelector()
         plt.show()
         region.foodCircle = sel.asXYR()
Пример #4
0
 def defineFoodRegions(self):
     if self.firstFrame is None:
         self.readFirstFrame()
     raw_input("Draw a circle covering the food for each region...")
     for region in self.regions:
         crop = region.cropRegion
         plt.imshow(wp.cropImageToRegion(self.firstFrame, crop),
                    plt.gray())
         plt.title(region.strainName + " " + region.wormName)
         sel = roitools.CircleRegionSelector()
         plt.show()
         region.foodCircle = sel.asXYR()
Пример #5
0
 def testMorphologicalCleaning(self, regionIdx):
     plt.figure()
     region = self.regions[regionIdx]
     ip = self.imageProcessor
     cropped = wp.cropImageToRegion(self.firstFrame, region.cropRegion)
     filtered = ip.applyBackgroundFilter(cropped)
     ax1 = plt.subplot(1, 2, 1)
     thresholded = ip.applyThreshold(filtered)
     plt.imshow(thresholded, plt.gray())
     plt.subplot(1, 2, 2, sharex=ax1, sharey=ax1)
     cleaned = ip.applyMorphologicalCleaning(thresholded)
     # remove ignored areas
     if region.ignoredAreas is not None:
         cleaned[region.ignoredAreas == 255] = False
     plt.imshow(cleaned, plt.gray())
     plt.show()
Пример #6
0
 def testMorphologicalCleaning(self, regionIdx):
     plt.figure()
     region = self.regions[regionIdx]
     ip = self.imageProcessor
     cropped = wp.cropImageToRegion(self.firstFrame, region.cropRegion)
     filtered = ip.applyBackgroundFilter(cropped)
     ax1 = plt.subplot(1,2,1)
     thresholded = ip.applyThreshold(filtered)
     plt.imshow(thresholded, plt.gray())
     plt.subplot(1,2,2, sharex=ax1, sharey=ax1)
     cleaned = ip.applyMorphologicalCleaning(thresholded)
     # remove ignored areas
     if region.ignoredAreas is not None:
         cleaned[region.ignoredAreas==255] = False
     plt.imshow(cleaned, plt.gray())
     plt.show()
Пример #7
0
 def selectNonWormRegionsToIgnore(self):
     if self.firstFrame is None:
         self.readFirstFrame()
     raw_input("Click on the worm (if visible) in the thresholded image for each region...")
     for region in self.regions:
         ip = self.imageProcessor
         cropped = wp.cropImageToRegion(self.firstFrame, region.cropRegion)
         filtered = ip.applyBackgroundFilter(cropped)
         ax1 = plt.subplot(1,2,1)
         plt.imshow(filtered, plt.gray())
         plt.subplot(1,2,2, sharex=ax1, sharey=ax1)
         thresholded = ip.applyThreshold(filtered)
         cleaned = ip.applyMorphologicalCleaning(thresholded)
         selector = roitools.ThresholdedImageSelector(cleaned)
         plt.show()
         region.ignoredAreas = selector.getImageNonSelectedRegions()
Пример #8
0
 def selectNonWormRegionsToIgnore(self):
     if self.firstFrame is None:
         self.readFirstFrame()
     raw_input(
         "Click on the worm (if visible) in the thresholded image for each region..."
     )
     for region in self.regions:
         ip = self.imageProcessor
         cropped = wp.cropImageToRegion(self.firstFrame, region.cropRegion)
         filtered = ip.applyBackgroundFilter(cropped)
         ax1 = plt.subplot(1, 2, 1)
         plt.imshow(filtered, plt.gray())
         plt.subplot(1, 2, 2, sharex=ax1, sharey=ax1)
         thresholded = ip.applyThreshold(filtered)
         cleaned = ip.applyMorphologicalCleaning(thresholded)
         selector = roitools.ThresholdedImageSelector(cleaned)
         plt.show()
         region.ignoredAreas = selector.getImageNonSelectedRegions()
Пример #9
0
    def processFrame(self, frame, idx):
        # crop frame
        cFrame = wp.cropImageToRegion(frame, self.cropRegion)
        # filter frame
        fFrame = self.imageProcessor.applyBackgroundFilter(cFrame)
        # threshold frame
        tFrame = self.imageProcessor.applyThreshold(fFrame)
        # morphological cleaning
        clFrame = self.imageProcessor.applyMorphologicalCleaning(tFrame)
        # remove ignored areas
        if self.ignoredAreas is not None:
            clFrame[self.ignoredAreas == 255] = False
        # worm identification
        ip = self.imageProcessor
        # identify possible worms in image
        # returns contours, areas
        possibleWorms = ip.identifyPossibleWorms(clFrame)
        if (possibleWorms is not None and len(possibleWorms) > 0):
            # likely worm is the largest area
            likelyWorm = max(possibleWorms, key=lambda worm: worm[1])
        else:
            likelyWorm = None

        if likelyWorm is not None:
            # Create worm object which will measure
            # the properties of the worm
            try:
                worm = self.measureWorm(fFrame,
                                        clFrame,
                                        likelyWorm[0])

                # write results to HDF5 store
                pre = (self.resultsStorePath + '/' +
                       self.strainName + '/' +
                       self.wormName)
                worm.store(self.resultsStoreFile,
                           pre, idx)
            except(Exception) as e:
                Logger.logPrint('Error in {0} {1} frame {2} analyzing worm: {3}'.format(
                    self.strainName, self.wormName, str(idx), str(e)))
Пример #10
0
 def readFirstFrame(self):
     if self.videoFile is None:
         self.firstFrame = None
         return
     video = cv2.VideoCapture()
     if video.open(self.videoFile):
         success, firstFrame = video.read()
         if not success:
             raise Exception("Couldn't read video")
         else:
             firstFrameChannels = cv2.split(firstFrame)
             frame = firstFrameChannels[0]
             crop = self.h5ref['cropRegion'][...]
             frame = wip.cropImageToRegion(frame, crop)
             ip = self.getImageProcessor()
             frame = ip.applyBackgroundFilter(frame)
             self.firstFrame = cv2.normalize(frame,
                                             alpha=0,
                                             beta=255,
                                             norm_type=cv2.NORM_MINMAX)
     else:
         raise Exception("Couldn't open video")
Пример #11
0
 def readFirstFrame(self):
     if self.videoFile is None:
         self.firstFrame = None
         return
     video = cv2.VideoCapture()
     if video.open(self.videoFile):
         success, firstFrame = video.read()
         if not success:
             raise Exception("Couldn't read video")
         else:
             firstFrameChannels = cv2.split(firstFrame)
             frame = firstFrameChannels[0]
             crop = self.h5ref['cropRegion'][...]
             frame = wip.cropImageToRegion(frame, crop)
             ip = self.getImageProcessor()
             frame = ip.applyBackgroundFilter(frame)
             self.firstFrame = cv2.normalize(frame,
                                             alpha=0,
                                             beta=255,
                                             norm_type=cv2.NORM_MINMAX)
     else:
         raise Exception("Couldn't open video")
Пример #12
0
    def processFrame(self, frame, idx):
        # crop frame
        cFrame = wp.cropImageToRegion(frame, self.cropRegion)
        # filter frame
        fFrame = self.imageProcessor.applyBackgroundFilter(cFrame)
        # threshold frame
        tFrame = self.imageProcessor.applyThreshold(fFrame)
        # morphological cleaning
        clFrame = self.imageProcessor.applyMorphologicalCleaning(tFrame)
        # remove ignored areas
        if self.ignoredAreas is not None:
            clFrame[self.ignoredAreas == 255] = False
        # worm identification
        ip = self.imageProcessor
        # identify possible worms in image
        # returns contours, areas
        possibleWorms = ip.identifyPossibleWorms(clFrame)
        if (possibleWorms is not None and len(possibleWorms) > 0):
            # likely worm is the largest area
            likelyWorm = max(possibleWorms, key=lambda worm: worm[1])
        else:
            likelyWorm = None

        if likelyWorm is not None:
            # Create worm object which will measure
            # the properties of the worm
            try:
                worm = self.measureWorm(fFrame, clFrame, likelyWorm[0])

                # write results to HDF5 store
                pre = (self.resultsStorePath + '/' + self.strainName + '/' +
                       self.wormName)
                worm.store(self.resultsStoreFile, pre, idx)
            except (Exception) as e:
                Logger.logPrint(
                    'Error in {0} {1} frame {2} analyzing worm: {3}'.format(
                        self.strainName, self.wormName, str(idx), str(e)))