Пример #1
0
    def __init__(self, img, wavelet_families=wavelets.get_all_wavelet_families()):
        uiutils.Experience.__init__(self)
        self.gui = uiutils.UI(1000, 600, "Wavelet Transform 2D")
        bv = self.gui.add_box(uiutils.VBox())
        self.ctl = bv.add(uiutils.HBox())
        self.view = bv.add(plotutils.BaseCustomCanvas(), True)
        bv.add(plotutils.ExtendedNavigationToolbar(self.view, self.gui))

        self.img = uiutils.OpenImage(self.ctl, self, img=img)
        self.wavelet = waveletsui.WaveletSelector(self.ctl, self,
                                                  wavelet_families, initial=wavelets.get_wavelet("b3"))
        self.scale = uiutils.ScaleRangeParameter(self.ctl, self, "Scale:", 1, 6, 1, 2)
        decs = {"DWT": wtutils.dwt, "UWT": wtutils.uwt, "UIWT": wtutils.uiwt, "UIMWT": wtutils.uimwt}
        exts = {"Symmetry": "symm", "Zero": "zero", "Periodic": "wrap"}

        self.dec = uiutils.ListParameter(self.ctl, self, "Transform:", decs)
        self.ext = uiutils.ListParameter(self.ctl, self, "Boundary:", exts, "symm")

        uiutils.Button(self.ctl, self, "Save result", self.on_save)

        self.add_spinner(self.ctl)

        self.ax1, self.ax2 = self.view.figure.subplots(1, 2)

        self.current_wavedec = None

        self.gui.show()
        self.do_update()
Пример #2
0
    def decompose(self, wavelet_fct=None, img=None, bg=None, min_scale=None, max_scale=None):
        if wavelet_fct is None:
            wavelet_fct = self.config.get("wd_wavelet")
        if img is None:
            img = self.img
        if bg is None:
            bg = self.bg
        if min_scale is None:
            min_scale = self.config.get("min_scale")
        if max_scale is None:
            max_scale = self.config.get("max_scale")
        wt_dec = self.config.get("dec")
        if max_scale is None:
            max_scale = wavelets.get_wavelet(wavelet_fct).get_max_level(img.data)

        scales = wtutils.wavedec(img.data, wavelet_fct, max_scale, dec=wt_dec)
        self.approx = scales[-1]
        scales = scales[min_scale:-1]
        scales = [nputils.resize_like(s, img.data) for s in scales]

        scales_noise = wtutils.wave_noise_factor(bg, wavelet_fct, max_scale, wt_dec, beam=img.get_beam())
        scales_noise = scales_noise[min_scale:]

        if wavelet_fct in ['b3', 'triangle2'] :
            scales_width = [max(1.5, 3 * min(1, j) * pow(2, max(0, j - 1))) for j in range(min_scale, max_scale)]
        else:
            scales_width = [max(1, 2 * min(1, j) * pow(2, max(0, j - 1))) for j in range(min_scale, max_scale)]

        return zip(scales, scales_noise, scales_width)
Пример #3
0
    def decompose(self,
                  wavelet_fct=None,
                  img=None,
                  bg=None,
                  min_scale=None,
                  max_scale=None):
        if wavelet_fct is None:
            wavelet_fct = self.config.get("wd_wavelet")
        if img is None:
            img = self.img
        if bg is None:
            bg = self.bg
        if min_scale is None:
            min_scale = self.config.get("min_scale")
        if max_scale is None:
            max_scale = self.config.get("max_scale")
        wt_dec = self.config.get("dec")
        if max_scale is None:
            max_scale = wavelets.get_wavelet(wavelet_fct).get_max_level(
                img.data)

        scales = wtutils.wavedec(img.data, wavelet_fct, max_scale, dec=wt_dec)
        self.approx = scales[-1]
        scales = scales[min_scale:-1]
        scales = [nputils.resize_like(s, img.data) for s in scales]

        scales_noise = wtutils.wave_noise_factor(bg,
                                                 wavelet_fct,
                                                 max_scale,
                                                 wt_dec,
                                                 beam=img.get_beam())
        scales_noise = scales_noise[min_scale:]

        if wavelet_fct in ['b3', 'triangle2']:
            scales_width = [
                max(1.5, 3 * min(1, j) * pow(2, max(0, j - 1)))
                for j in range(min_scale, max_scale)
            ]
        else:
            scales_width = [
                max(1, 2 * min(1, j) * pow(2, max(0, j - 1)))
                for j in range(min_scale, max_scale)
            ]

        return zip(scales, scales_noise, scales_width)
Пример #4
0
    def __init__(self, wavelet_families=wavelets.get_all_wavelet_families()):
        uiutils.Experience.__init__(self)
        self.gui = uiutils.UI(900, 500, "Wavelet Filter Bank Response")

        box = self.gui.add_box(uiutils.VBox())

        self.figure = plotutils.ReplayableFigure(self.do_plot, None)
        self.view = box.add(plotutils.FigureCanvas(self.figure), True)

        ctl = box.add(uiutils.HBox())
        ctl.add(plotutils.ExtendedNavigationToolbar(self.view, self.gui), True)

        self.wavelet = waveletsui.WaveletSelector(ctl, self,
                                                  wavelet_families, initial=wavelets.get_wavelet("b3"))

        self.dx = uiutils.SpinRangeParameter(ctl, self, "dx", -10, 10, 1, 0)

        self.add_spinner(ctl)

        self.gui.show()
        self.do_update()
Пример #5
0
    def __init__(self,
                 img,
                 wavelet_families=wavelets.get_all_wavelet_families()):
        uiutils.Experience.__init__(self)
        self.gui = uiutils.UI(1000, 600, "Wavelet Transform 2D")
        bv = self.gui.add_box(uiutils.VBox())
        self.ctl = bv.add(uiutils.HBox())
        self.view = bv.add(plotutils.BaseCustomCanvas(), True)
        bv.add(plotutils.ExtendedNavigationToolbar(self.view, self.gui))

        self.img = uiutils.OpenImage(self.ctl, self, img=img)
        self.wavelet = waveletsui.WaveletSelector(
            self.ctl,
            self,
            wavelet_families,
            initial=wavelets.get_wavelet("b3"))
        self.scale = uiutils.ScaleRangeParameter(self.ctl, self, "Scale:", 1,
                                                 6, 1, 2)
        decs = {
            "DWT": wtutils.dwt,
            "UWT": wtutils.uwt,
            "UIWT": wtutils.uiwt,
            "UIMWT": wtutils.uimwt
        }
        exts = {"Symmetry": "symm", "Zero": "zero", "Periodic": "wrap"}

        self.dec = uiutils.ListParameter(self.ctl, self, "Transform:", decs)
        self.ext = uiutils.ListParameter(self.ctl, self, "Boundary:", exts,
                                         "symm")

        uiutils.Button(self.ctl, self, "Save result", self.on_save)

        self.add_spinner(self.ctl)

        self.ax1, self.ax2 = self.view.figure.subplots(1, 2)

        self.current_wavedec = None

        self.gui.show()
        self.do_update()