Beispiel #1
0
    def PlotMoments(self):
        data = self.canvas.img.get_array()
        pm = self.procMoment

        # data=ndi.median_filter(data, 3)
        try:
            data.ravel()[pm.mskIdx] = 0
        except AttributeError as e:
            print(e)
        try:
            data = data[pm.roi]
        except AttributeError as e:
            print(e)
        # data=np.log(data+1)
        # data[100:110,500:510]=1000 #y,x
        # data[650:850,700:850]=0 #y,x
        # pm.Process(np.log(data+1))
        pm.Process(data)
        xbar, ybar, cov = pm.GetIntertialAxis()

        m = pm.resArr
        m00 = m[0]
        m01 = m[1]
        m10 = m[2]
        m11 = m[3]
        m02 = m[4]
        m20 = m[5]

        xm = m10 / m00
        ym = m01 / m00
        u11 = (m11 - xm * m01) / m00
        # u11[u11<0.]=0. #processing rounding error
        u20 = (m20 - xm * m10) / m00
        u02 = (m02 - ym * m01) / m00
        a = (u20 + u02) / 2
        b = np.sqrt(4 * u11**2 + (u20 - u02)**2) / 2
        l0 = a + b
        l1 = a - b
        ang = 0.5 * np.arctan2(
            2 * u11,
            (u20 - u02)) / (2 * np.pi) * 360.0  # orientation value 0..1
        exc = np.sqrt(
            1 - l1 / l0
        )  # eccentricity :circle=0: http://en.wikipedia.org/wiki/Eccentricity_%28mathematics%29

        print("xb:%g yb:%g cov:%g %g %g %g  ang:%g exc:%g" %
              ((xm, ym) + tuple(cov.ravel()) + (ang, exc)))
        # fig, ax = plt.subplots()
        # ax.imshow(data,vmax=100,interpolation='nearest')
        # plt.show()
        ax = self.canvas.img.get_axes()
        try:
            for o in self.goMoment:
                o.remove()
        except AttributeError:
            pass

        self.goMoment = ProcMoment.PlotMoments(ax, xbar, ybar, cov)
        ax.axis("image")
Beispiel #2
0
    def OnShowMoments(self, event):
        if event.IsChecked():
            dlg = wx.FileDialog(
                self,
                "Choose valid mask file (e.g. pilatus_valid_mask.mat)",
                os.getcwd(),
                "",
                "MATLAB files (*.mat)|*.mat|all (*.*)|*.*",
                wx.FD_OPEN | wx.FD_CHANGE_DIR,
            )
            if dlg.ShowModal() == wx.ID_OK:
                fnMatMsk = dlg.GetPath()
                print("OnOpen", fnMatMsk)
            dlg.Destroy()
            if not fnMatMsk:
                return
            # fnMatMsk='/scratch/detectorData/cSAXS_2013_10_e14608_georgiadis_3D_for_Marianne/analysis/data/pilatus_valid_mask.mat'
            self.procMoment = pm = ProcMoment()
            pm.SetMskMat(fnMatMsk, False)
            # roi=[603, 826, 200, 200]
            # pm.roi=(slice(roi[1],roi[1]+roi[3]),slice(roi[0],roi[0]+roi[2]))
            # pm.shape=(roi[3],roi[2])

            # pm.SetProcess('python')
            # pm.SetProcess('pyFast')
            pm.SetProcess("c")
            self.PlotMoments()
            # self.canvas.img.draw()
            data = self.canvas.img.get_array()
            self.canvas.img.set_array(data)
            fig, ax = plt.subplots(2)
            v = data.sum(axis=0)
            x = np.arange(v.size)
            x0 = x.sum()
            m0 = v.sum()
            m1 = (v * x).sum()
            m2 = (v * x * x).sum()
            ax[0].plot(v)
            m = m1 / m0
            s = np.sqrt((m2 - (m1**2 / m0)) / m0)
            xx = 1 / (s * np.sqrt(2 * np.pi)) * np.exp(-0.5 * ((x - m) / s)**2)
            ax[0].set_title("%g | %g | %g | %g | %g" % (m0, m1, m2, m, s))
            ax[0].hold(True)
            ax[0].plot(xx * m0)

            v = data.sum(axis=1)
            ax[1].plot(v)

            plt.show()
            # print pm.resArr[0:3],pm.resArr[1]/pm.resArr[0],pm.resArr[2]/pm.resArr[0]
        else:
            for o in self.goMoment:
                o.remove()
            del self.goMoment
            del self.procMoment
        self.canvas.draw()