Beispiel #1
0
 def __init__(self):
     x, y = np.ogrid[-2*np.pi:2*np.pi:256j, -2*np.pi:2*np.pi:256j]
     self.img_data = np.sin(x)*y
     #self.img_mask = np.zeros((len(x), len(y[0]), 4), dtype=np.uint8)
     #self.img_mask[:, :, 3] = 255
     self.img_index = np.array(list((np.broadcast(y, x))))
     
     plotdata = ArrayPlotData(img_data=self.img_data, mask_data=self.img_data) 
     plot1 = Plot(plotdata, padding=10) 
     img_plot = plot1.img_plot("img_data",
         xbounds=(np.min(x), np.max(x)),
         ybounds=(np.min(y), np.max(y)))[0]
    
     self.lasso = LassoSelection(img_plot)
     img_plot.tools.append(self.lasso)
     self.ll = LassoOverlay(img_plot, lasso_selection=self.lasso)
     img_plot.overlays.append(self.ll)
     self.lasso.on_trait_change(self._selection_changed, 'selection_completed')
     
     plot2 = Plot(plotdata, padding=10)
     plot2.img_plot("mask_data")
    
     self.plot = HPlotContainer(plot1, plot2)
     self.plot1 = plot1
     self.plot2 = plot2
     self.plotdata = plotdata
Beispiel #2
0
    def __init__(self, **traits):
        super(LassoDemoPlot, self).__init__(**traits)
        x = np.random.random(N)
        y = np.random.random(N)
        x2 = np.array([])
        y2 = np.array([])

        data = ArrayPlotData(x=x, y=y, x2=x2, y2=y2)

        plot1 = Plot(data, padding=10)
        scatter_plot1 = plot1.plot(("x", "y"),
                                   type="scatter",
                                   marker="circle",
                                   color="blue")[0]

        self.lasso = LassoSelection(scatter_plot1,
                                    incremental_select=True,
                                    selection_datasource=scatter_plot1.index)
        self.lasso.on_trait_change(self._selection_changed,
                                   'selection_changed')
        scatter_plot1.tools.append(self.lasso)
        scatter_plot1.overlays.append(
            LassoOverlay(scatter_plot1, lasso_selection=self.lasso))

        plot2 = Plot(data, padding=10)
        plot2.index_range = plot1.index_range
        plot2.value_range = plot1.value_range
        plot2.plot(("x2", "y2"), type="scatter", marker="circle", color="red")

        self.plot = HPlotContainer(plot1, plot2)
        self.plot2 = plot2
        self.data = data
Beispiel #3
0
def _create_plot_component():# Create a scalar field to colormap
    xbounds = (-2*pi, 2*pi, 600)
    ybounds = (-1.5*pi, 1.5*pi, 300)
    xs = linspace(*xbounds)
    ys = linspace(*ybounds)
    x, y = meshgrid(xs,ys)
    z = sin(x)*y

    # Create a plot data obect and give it this data
    pd = ArrayPlotData()
    pd.set_data("imagedata", z)

    # Create the plot
    plot = Plot(pd)
    img_plot = plot.img_plot("imagedata",
                             xbounds=xbounds[:2],
                             ybounds=ybounds[:2],
                             colormap=jet)[0]

    # Tweak some of the plot properties
    plot.title = "Image Plot with Lasso"
    plot.padding = 50

    lasso_selection = LassoSelection(component=img_plot)
    lasso_selection.on_trait_change(lasso_updated, "disjoint_selections")
    lasso_overlay = LassoOverlay(lasso_selection = lasso_selection, component=img_plot)
    img_plot.tools.append(lasso_selection)
    img_plot.overlays.append(lasso_overlay)
    return plot
Beispiel #4
0
class LassoDemoPlot(HasTraits):
    plot = Instance(HPlotContainer)
    data = Instance(ArrayPlotData)
    traits_view = View(Item('plot', editor=ComponentEditor(),
                            show_label=False),
                       width=600,
                       height=320,
                       resizable=True,
                       title="Lasso Tool Demo")

    def __init__(self, **traits):
        super(LassoDemoPlot, self).__init__(**traits)
        x = np.random.random(N)
        y = np.random.random(N)
        x2 = np.array([])
        y2 = np.array([])

        data = ArrayPlotData(x=x, y=y, x2=x2, y2=y2)

        plot1 = Plot(data, padding=10)
        scatter_plot1 = plot1.plot(("x", "y"),
                                   type="scatter",
                                   marker="circle",
                                   color="blue")[0]

        self.lasso = LassoSelection(scatter_plot1,
                                    incremental_select=True,
                                    selection_datasource=scatter_plot1.index)
        self.lasso.on_trait_change(self._selection_changed,
                                   'selection_changed')
        scatter_plot1.tools.append(self.lasso)
        scatter_plot1.overlays.append(
            LassoOverlay(scatter_plot1, lasso_selection=self.lasso))

        plot2 = Plot(data, padding=10)
        plot2.index_range = plot1.index_range
        plot2.value_range = plot1.value_range
        plot2.plot(("x2", "y2"), type="scatter", marker="circle", color="red")

        self.plot = HPlotContainer(plot1, plot2)
        self.plot2 = plot2
        self.data = data

    def _selection_changed(self):
        index = np.array(self.lasso.selection_datasource.metadata["selection"],
                         dtype=np.bool)
        self.data["x2"] = self.data["x"][index]
        self.data["y2"] = self.data["y"][index]
  def __init__(self, **traits):
      super(LassoDemoPlot, self).__init__(**traits)
      x = np.random.random(N)
      y = np.random.random(N)
      x2 = np.array([])
      y2 = np.array([])
 
      data = ArrayPlotData(x=x, y=y, x2=x2, y2=y2) 
      
      
      plot1 = Plot(data, padding=10) 
      scatter_plot1 = plot1.plot(("x", "y"), type="scatter", marker="circle", color="blue")[0]
     
      self.lasso = LassoSelection(scatter_plot1, incremental_select=True,  
          selection_datasource=scatter_plot1.index)
      self.lasso.on_trait_change(self._selection_changed, 'selection_changed') 
      scatter_plot1.tools.append(self.lasso)
      scatter_plot1.overlays.append(LassoOverlay(scatter_plot1, lasso_selection=self.lasso)) 
      
      plot2 = Plot(data, padding=10)
      plot2.index_range = plot1.index_range
      plot2.value_range = plot1.value_range
      plot2.plot(("x2", "y2"), type="scatter", marker="circle", color="red")
      
      
      self.plot = HPlotContainer(plot1, plot2)
      self.plot2 = plot2
      self.data = data
class LassoDemoPlot(HasTraits):
    plot = Instance(HPlotContainer) 
    data = Instance(ArrayPlotData)
    traits_view = View(
        Item('plot',editor=ComponentEditor(), show_label=False), 
        width=600, height=320, resizable=True, title="Lasso Tool Demo")

    def __init__(self, **traits):
        super(LassoDemoPlot, self).__init__(**traits)
        x = np.random.random(N)
        y = np.random.random(N)
        x2 = np.array([])
        y2 = np.array([])
   
        data = ArrayPlotData(x=x, y=y, x2=x2, y2=y2) 
        
        
        plot1 = Plot(data, padding=10) 
        scatter_plot1 = plot1.plot(("x", "y"), type="scatter", marker="circle", color="blue")[0]
       
        self.lasso = LassoSelection(scatter_plot1, incremental_select=True,  
            selection_datasource=scatter_plot1.index)
        self.lasso.on_trait_change(self._selection_changed, 'selection_changed') 
        scatter_plot1.tools.append(self.lasso)
        scatter_plot1.overlays.append(LassoOverlay(scatter_plot1, lasso_selection=self.lasso)) 
        
        plot2 = Plot(data, padding=10)
        plot2.index_range = plot1.index_range
        plot2.value_range = plot1.value_range
        plot2.plot(("x2", "y2"), type="scatter", marker="circle", color="red")
        
        
        self.plot = HPlotContainer(plot1, plot2)
        self.plot2 = plot2
        self.data = data
        
    
    def _selection_changed(self):
        index = np.array(self.lasso.selection_datasource.metadata["selection"], dtype=np.bool)
        self.data["x2"] = self.data["x"][index]
        self.data["y2"] = self.data["y"][index]
Beispiel #7
0
class LassoDemoPlot(HasTraits):
    plot = Instance(HPlotContainer) 
    traits_view = View(
        Item('plot',editor=ComponentEditor(), show_label=False), 
        width=600, height=320, resizable=True, title="Lasso Tool Demo")

    def __init__(self):
        x, y = np.ogrid[-2*np.pi:2*np.pi:256j, -2*np.pi:2*np.pi:256j]
        self.img_data = np.sin(x)*y
        #self.img_mask = np.zeros((len(x), len(y[0]), 4), dtype=np.uint8)
        #self.img_mask[:, :, 3] = 255
        self.img_index = np.array(list((np.broadcast(y, x))))
        
        plotdata = ArrayPlotData(img_data=self.img_data, mask_data=self.img_data) 
        plot1 = Plot(plotdata, padding=10) 
        img_plot = plot1.img_plot("img_data",
            xbounds=(np.min(x), np.max(x)),
            ybounds=(np.min(y), np.max(y)))[0]
       
        self.lasso = LassoSelection(img_plot)
        img_plot.tools.append(self.lasso)
        self.ll = LassoOverlay(img_plot, lasso_selection=self.lasso)
        img_plot.overlays.append(self.ll)
        self.lasso.on_trait_change(self._selection_changed, 'selection_completed')
        
        plot2 = Plot(plotdata, padding=10)
        plot2.img_plot("mask_data")
       
        self.plot = HPlotContainer(plot1, plot2)
        self.plot1 = plot1
        self.plot2 = plot2
        self.plotdata = plotdata
        
    def _selection_changed(self):
        data = np.logical_not(points_in_polygon(self.img_index, self.lasso.dataspace_points, False).astype(np.bool))
        data = data.reshape((256, 256))
        copy = self.img_data.copy()
        copy[data] = 0
        self.plotdata["mask_data"] = copy
        self.plot2.request_redraw()
    def __init__(self):
        #读入图像
        img = cv.imread("lena_full.jpg")
        img2 = cv.Mat()
        cv.cvtColor(img, img2, cv.CV_BGR2GRAY)
        img = cv.Mat()
        cv.resize(img2, img, cv.Size(N, N))
        self.fimg = fft.fft2(img[:])  # 图像的频域信号
        mag_img = np.log10(np.abs(self.fimg))

        # 创建计算用图像
        filtered_img = np.zeros((N, N), dtype=np.float)
        self.mask = np.zeros((N, N), dtype=np.float)
        self.mask_img = cv.asMat(self.mask)  # 在self.mask上绘制多边形用的图像

        # 创建数据源
        self.data = ArrayPlotData(mag_img=fft.fftshift(mag_img),
                                  filtered_img=filtered_img,
                                  mask_img=self.mask)

        # 创建三个图像绘制框以及容器
        meg_plot, img = self.make_image_plot("mag_img")
        mask_plot, _ = self.make_image_plot("mask_img")
        filtered_plot, _ = self.make_image_plot("filtered_img")
        self.plot = HPlotContainer(meg_plot, mask_plot, filtered_plot)

        # 创建套索工具
        lasso_selection = LassoSelection(component=img)
        lasso_overlay = LassoOverlay(lasso_selection=lasso_selection,
                                     component=img,
                                     selection_alpha=0.3)
        img.tools.append(lasso_selection)
        img.overlays.append(lasso_overlay)
        self.lasso_selection = lasso_selection

        # 监听套索工具的事件、开启时钟事件
        lasso_selection.on_trait_change(self.lasso_updated,
                                        "disjoint_selections")
        self.timer = Timer(50, self.on_timer)
Beispiel #9
0
    def _scattertool_changed(self,old,new):
        if new == 'No Selection':
            self.plot.tools[0].drag_button='left'
        else:
            self.plot.tools[0].drag_button='right'
        if old is not None and 'lasso' in old:
            if new is not None and 'lasso' in new:
                #connect correct callbacks
                self.lassomode = new.replace('lasso','')
                return
            else:
                #TODO:test
                self.scatter.tools[-1].on_trait_change(self._lasso_handler,
                                            'selection_changed',remove=True)
                del self.scatter.overlays[-1]
                del self.lassomode
        elif old == 'clickimmediate':
            self.scatter.index.on_trait_change(self._immediate_handler,
                                            'metadata_changed',remove=True)

        self.scatter.tools = []
        if new is None:
            pass
        elif 'click' in new:
            smodemap = {'clickimmediate':'single','clicksingle':'single',
                        'clicktoggle':'toggle'}
            self.scatter.tools.append(ScatterInspector(self.scatter,
                                      selection_mode=smodemap[new]))
            if new == 'clickimmediate':
                self.clearsel = True
                self.scatter.index.on_trait_change(self._immediate_handler,
                                                    'metadata_changed')
        elif 'lasso' in new:
            lasso_selection = LassoSelection(component=self.scatter,
                                    selection_datasource=self.scatter.index)
            self.scatter.tools.append(lasso_selection)
            lasso_overlay = LassoOverlay(lasso_selection=lasso_selection,
                                         component=self.scatter)
            self.scatter.overlays.append(lasso_overlay)
            self.lassomode = new.replace('lasso','')
            lasso_selection.on_trait_change(self._lasso_handler,
                                            'selection_changed')
            lasso_selection.on_trait_change(self._lasso_handler,
                                            'selection_completed')
            lasso_selection.on_trait_change(self._lasso_handler,
                                            'updated')
        else:
            raise TraitsError('invalid scattertool value')
 def __init__(self):
     #读入图像
     img = cv.imread("lena_full.jpg")
     img2 = cv.Mat()
     cv.cvtColor(img, img2, cv.CV_BGR2GRAY)
     img = cv.Mat()
     cv.resize(img2, img, cv.Size(N, N))
     self.fimg = fft.fft2(img[:]) # 图像的频域信号
     mag_img = np.log10(np.abs(self.fimg))
 
     # 创建计算用图像
     filtered_img = np.zeros((N, N), dtype=np.float)
     self.mask = np.zeros((N, N), dtype=np.float)
     self.mask_img = cv.asMat(self.mask) # 在self.mask上绘制多边形用的图像
     
     # 创建数据源
     self.data = ArrayPlotData(
         mag_img = fft.fftshift(mag_img),
         filtered_img = filtered_img,
         mask_img = self.mask
     )
     
     # 创建三个图像绘制框以及容器
     meg_plot, img = self.make_image_plot("mag_img")
     mask_plot, _ = self.make_image_plot("mask_img")       
     filtered_plot, _ = self.make_image_plot("filtered_img")
     self.plot = HPlotContainer(meg_plot, mask_plot, filtered_plot)     
     
     # 创建套索工具
     lasso_selection = LassoSelection(component=img)
     lasso_overlay = LassoOverlay(lasso_selection = lasso_selection, component=img, selection_alpha=0.3)
     img.tools.append(lasso_selection)
     img.overlays.append(lasso_overlay)
     self.lasso_selection = lasso_selection                 
     
     # 监听套索工具的事件、开启时钟事件
     lasso_selection.on_trait_change(self.lasso_updated, "disjoint_selections")
     self.timer = Timer(50, self.on_timer)
Beispiel #11
0
    def _scattertool_changed(self,old,new):
        if new == 'No Selection':
            self.plot.tools[0].drag_button='left'
        else:
            self.plot.tools[0].drag_button='right'
        if old is not None and 'lasso' in old:
            if new is not None and 'lasso' in new:
                #connect correct callbacks
                self.lassomode = new.replace('lasso','')
                return
            else:
                #TODO:test
                self.scatter.tools[-1].on_trait_change(self._lasso_handler,
                                            'selection_changed',remove=True)
                del self.scatter.overlays[-1]
                del self.lassomode
        elif old == 'clickimmediate':
            self.scatter.index.on_trait_change(self._immediate_handler,
                                            'metadata_changed',remove=True)

        self.scatter.tools = []
        if new is None:
            pass
        elif 'click' in new:
            smodemap = {'clickimmediate':'single','clicksingle':'single',
                        'clicktoggle':'toggle'}
            self.scatter.tools.append(ScatterInspector(self.scatter,
                                      selection_mode=smodemap[new]))
            if new == 'clickimmediate':
                self.clearsel = True
                self.scatter.index.on_trait_change(self._immediate_handler,
                                                    'metadata_changed')
        elif 'lasso' in new:
            lasso_selection = LassoSelection(component=self.scatter,
                                    selection_datasource=self.scatter.index)
            self.scatter.tools.append(lasso_selection)
            lasso_overlay = LassoOverlay(lasso_selection=lasso_selection,
                                         component=self.scatter)
            self.scatter.overlays.append(lasso_overlay)
            self.lassomode = new.replace('lasso','')
            lasso_selection.on_trait_change(self._lasso_handler,
                                            'selection_changed')
            lasso_selection.on_trait_change(self._lasso_handler,
                                            'selection_completed')
            lasso_selection.on_trait_change(self._lasso_handler,
                                            'updated')
        else:
            raise TraitsError('invalid scattertool value')