示例#1
0
    def test3(self):
        import sys
        data1 = np.array([[0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0],
                          [0, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0]],
                         np.float32)
        bl1 = np.zeros(data1.shape, np.int32)
        np1 = cImageD11.connectedpixels(data1, bl1, 0.1)
        data2 = np.array([[0, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 2, 0],
                          [0, 2, 0, 0, 0, 2, 0], [0, 2, 0, 0, 0, 2, 0]],
                         np.float32)
        bl2 = np.zeros(data2.shape, np.int32)
        np2 = cImageD11.connectedpixels(data2, bl2, 0.1)
        r1 = cImageD11.blobproperties(data1, bl1, np1)
        r2 = cImageD11.blobproperties(data2, bl2, np2)

        cImageD11.bloboverlaps(bl1, np1, r1, bl2, np2, r2, verbose=0)

        # check which peaks are zeroed
        self.assertAlmostEqual(np.sum(r1[0]), 0., 6)
        # Results pile up all in r2[0]
        self.assertAlmostEqual(np.sum(r2[1]), 0., 6)
        from ImageD11.cImageD11 import s_1, s_I, s_I2, \
            s_fI, s_ffI, s_sI, s_ssI, s_sfI, \
            bb_mn_f, bb_mn_s, bb_mx_f, bb_mx_s,\
            mx_I, mx_I_f, mx_I_s
        self.assertAlmostEqual(r2[0, s_1], 11, 6)
        self.assertAlmostEqual(r2[0, s_I], 17, 6)
示例#2
0
    def test1(self):
        import sys
        data1 = np.array([[1, 0, 1, 0, 0, 0, 0], [1, 0, 1, 0, 0, 0, 0],
                          [1, 0, 1, 1, 0, 0, 0], [1, 1, 1, 0, 0, 0, 0]],
                         np.float32)
        bl1 = np.zeros(data1.shape, np.int32)
        np1 = cImageD11.connectedpixels(data1, bl1, 0.1)
        data2 = np.array([[0, 0, 0, 0, 2, 0, 2], [0, 0, 0, 0, 2, 0, 2],
                          [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 0, 2, 0, 2]],
                         np.float32)
        bl2 = np.zeros(data2.shape, np.int32)
        np2 = cImageD11.connectedpixels(data2, bl2, 0.1)
        r1 = cImageD11.blobproperties(data1, bl1, np1, omega=-10.0)
        r2 = cImageD11.blobproperties(data2, bl2, np2, omega=10.0)

        cImageD11.bloboverlaps(bl1, np1, r1, bl2, np2, r2, verbose=0)
        # check r1 is zeroed
        err = np.sum(np.ravel(r1))
        self.assertAlmostEqual(err, 0., 6)
        from ImageD11.cImageD11 import s_1, s_I, s_I2, \
            s_fI, s_ffI, s_sI, s_ssI, s_sfI, \
            bb_mn_f, bb_mn_s, bb_mx_f, bb_mx_s,\
            bb_mn_o, bb_mx_o,\
            mx_I, mx_I_f, mx_I_s
        # check total pixels
        self.assertAlmostEqual(r2[0, s_1], 18.0, 6)
        self.assertAlmostEqual(r2[0, s_I], 26.0, 6)
        self.assertAlmostEqual(r2[0, bb_mn_f], 0.0, 6)
        self.assertAlmostEqual(r2[0, bb_mx_f], 6.0, 6)
        self.assertAlmostEqual(r2[0, bb_mn_s], 0.0, 6)
        self.assertAlmostEqual(r2[0, bb_mx_s], 3.0, 6)
        self.assertAlmostEqual(r2[0, bb_mn_o], -10.0, 6)
        self.assertAlmostEqual(r2[0, bb_mx_o], 10.0, 6)
示例#3
0
 def test_2_shapes(self):
     for t in [
             np.uint8, np.int8, np.uint16, np.int16, np.int32, np.uint32,
             np.float32, np.float
     ]:
         data = np.array([[1, 0, 1, 0, 2, 0, 2], [1, 0, 1, 0, 2, 0, 2],
                          [1, 0, 1, 0, 0, 2, 0], [1, 1, 1, 0, 2, 0, 2]], t)
         bl = np.zeros(data.shape, np.int32)
         cImageD11.connectedpixels(data.astype(np.float32), bl,
                                   0.1)  # threshold
         err = np.sum(np.ravel(data - bl))
         self.assertEqual(err, 0)
示例#4
0
 def test_find_max(self):
     for t in [
             np.uint8, np.int8, np.uint16, np.int16, np.int32, np.uint32,
             np.float32, np.float
     ]:
         data = np.array([[1, 0, 1], [1, 0, 1], [1, 8, 1], [1, 1, 1]], t)
         bl = np.zeros(data.shape, np.int32)
         npx = cImageD11.connectedpixels(data.astype(np.float32), bl, 0.1)
         self.assertEqual(npx, 1)
         err = np.sum(np.ravel(data - bl))
         self.assertEqual(err, 7)  # 8-1
         res = cImageD11.blobproperties(data.astype(np.float32),
                                        bl,
                                        npx,
                                        omega=22.)
         from ImageD11.cImageD11 import s_1, s_I, s_I2, \
             s_fI, s_ffI, s_sI, s_ssI, s_sfI, \
             bb_mn_f, bb_mn_s, bb_mx_f, bb_mx_s,\
             bb_mn_o, bb_mx_o, \
             mx_I, mx_I_f, mx_I_s, mx_I_o
         #            print res,res.shape
         self.assertAlmostEqual(res[0][s_1], 10)
         self.assertAlmostEqual(res[0][mx_I], 8)
         self.assertAlmostEqual(res[0][mx_I_f], 1)
         self.assertAlmostEqual(res[0][mx_I_s], 2)
         self.assertAlmostEqual(res[0][mx_I_o], 22)
示例#5
0
    def testOK(self):
        #import pdb; pdb.set_trace()
        i = self.s.row.astype(np.uint16)
        j = self.s.col.astype(np.uint16)
        v = self.s.data
        self.assertTrue((self.s.todense() == self.a).all())
        dl = np.zeros(self.a.shape, 'i')
        nd = cImageD11.connectedpixels(self.a, dl, self.threshold)
        dstart = timer()
        nd = cImageD11.connectedpixels(self.a, dl, self.threshold)
        dend = timer()
        sl = np.zeros(v.shape, 'i')
        ns = cImageD11.sparse_connectedpixels(v, i, j, self.threshold, sl)
        sbegin = timer()
        ns = cImageD11.sparse_connectedpixels(v, i, j, self.threshold, sl)
        send = timer()
        sld = scipy.sparse.coo_matrix((sl, (i, j)), shape=self.a.shape)
        testcase = (sld.todense() == dl).all()

        densetime = dend - dstart
        sparsetime = send - sbegin
        print(
            "sp_cp: %.3f ms vs %.3f ms, ratio %.1f nnz %d" %
            (1e3 * sparsetime, 1e3 * densetime, densetime / sparsetime,
             sld.nnz), " t=%.0f" % (self.threshold))
        if ~testcase:
            import pylab as pl
            pl.ioff()
            pl.figure()
            pl.subplot(311)
            pl.title("t=%f" % (self.threshold))
            pl.imshow(dl, interpolation='nearest')
            pl.colorbar()
            pl.subplot(312)
            pl.imshow(sld.todense(), interpolation='nearest')
            pl.colorbar()
            pl.subplot(313)
            pl.imshow(sld.todense() - dl, interpolation='nearest')
            pl.colorbar()
            pl.show()
        self.assertTrue(testcase)
示例#6
0
def check_moments():
    from ImageD11.cImageD11 import connectedpixels, blobproperties, \
        blob_moments, s_1, s_I, s_fI, s_sI, s_ssI, s_sfI, s_ffI,    \
        s_raw, f_raw, m_ss, m_ff, m_sf
    from ImageD11 import cImageD11
    p = {
        'm0': 10.,
        'm1x': 80.,
        'm1y': 77.5,
        'm2xx': 5.,
        'm2xy': 2.,
        'm2yy': 3.,
    }
    pk = testpeak(**p).astype(np.float32)
    blob = np.zeros(pk.shape, np.int32)
    npk = connectedpixels(pk, blob, 0., 0)
    res = blobproperties(pk, blob, npk, 0)
    err = blob_moments(res)
    mss = res[0, s_ssI] / res[0, s_I] - res[0, s_raw] * res[0, s_raw]
    mff = res[0, s_ffI] / res[0, s_I] - res[0, f_raw] * res[0, f_raw]
    msf = res[0, s_sfI] / res[0, s_I] - res[0, f_raw] * res[0, s_raw]
    assert np.isclose(res[0, s_raw], p['m1x'])
    assert np.isclose(res[0, f_raw], p['m1y'])
    assert np.isclose(mss, p['m2xx'])
    assert np.isclose(mff, p['m2yy'])
    assert np.isclose(msf, p['m2xy'])
    print("Moments look OK")
    if 0:
        for adr, name in zip((
                s_1, s_I, s_fI, s_sI, s_ssI, s_sfI, s_ffI, s_raw, f_raw, m_ss,
                m_ff, m_sf
        ), "s_1,s_I,s_fI,s_sI,s_ssI,s_sfI,s_ffI,s_raw,f_raw,m_ss,m_ff,m_sf".
                             split(",")):
            print(name, res[0, adr])
        print(res[0, s_raw], p['m1x'])
        print(res[0, f_raw], p['m1y'])
        print([[mss, msf], [msf, mff]])
        import pylab as pl
        pl.imshow(np.log(pk), origin='lower')
        pl.show()
def bench(int_im):
    im = int_im
    float_im = int_im.astype(np.float32)
    labelc = np.zeros(im.shape, np.int32)
    labelm = np.zeros(im.shape, np.int32)
    work = np.zeros(im.shape, np.int8)

    end0 = time.time()
    nc = cImageD11.connectedpixels(float_im, labelc, 1000)
    end1 = time.time()
    rc = cImageD11.blobproperties(float_im, labelc, nc, 0)
    cImageD11.blob_moments(rc)
    end2 = time.time()
    print("cptime", nc,
          "%.3f %.3f" % ((end1 - end0) * 1000, (end2 - end1) * 1000))

    wfloatim = np.where(float_im > 1000, float_im, 0)
    #import scipy.ndimage as ndi
    #wfloatim= (float_im - ndi.gaussian_filter( float_im , 32)).clip(0,1e9)

    end0 = time.time()
    nw = cImageD11.localmaxlabel(wfloatim, labelm, work)
    end1 = time.time()
    rw = cImageD11.blobproperties(wfloatim, labelm, nw, 0)
    cImageD11.blob_moments(rw)
    end2 = time.time()
    print("lmtime", nw,
          "%.3f %.3f" % ((end1 - end0) * 1000, (end2 - end1) * 1000))
    if 0:
        pks = np.array(pks).T
        import pylab as pl
        pl.imshow(pl.log(float_im),
                  origin='lower',
                  interpolation='nearest',
                  aspect='auto')
        pl.plot(pks[1], pks[0], "r+", label="ideal")
        pl.plot(rc[:, cImageD11.f_raw],
                rc[:, cImageD11.s_raw],
                "wx",
                label="connect")
        pl.plot(rw[:, cImageD11.f_raw],
                rw[:, cImageD11.s_raw],
                "ko",
                label="watershed",
                markerfacecolor='None')
        pl.legend()
        pl.figure()
        dci = [
            np.sqrt(np.min((pks[1] - x)**2 + (pks[0] - y)**2))
            for x, y in zip(rc[:, cImageD11.f_raw], rc[:, cImageD11.s_raw])
        ]
        pl.subplot(121)
        pl.plot(rc[:, cImageD11.s_raw], dci, '.', label="sconnected")
        pl.plot(rc[:, cImageD11.f_raw], dci, '.', label="fconnected")
        dwi = [
            np.sqrt(np.min((pks[1] - x)**2 + (pks[0] - y)**2))
            for x, y in zip(rw[:, cImageD11.f_raw], rw[:, cImageD11.s_raw])
        ]
        pl.subplot(122)
        pl.plot(rw[:, cImageD11.s_raw], dwi, '.', label="slocalmax")
        pl.plot(rw[:, cImageD11.f_raw], dwi, '.', label="flocalmax")
        pl.legend()
        pl.show()
示例#8
0
        pl.imshow( pl.log(im ))
        pl.show()

    s = 30000/im.max()
    int_im = (im*s).astype( np.uint16 )
    fabio.edfimage.edfimage( int_im ).write( "testoverlaps0000.edf" )

im = int_im
float_im=int_im.astype(np.float32)
labelc = np.zeros( im.shape, np.int32 )
labelm = np.zeros( im.shape, np.int32 )
work   = np.zeros( im.shape, np.int8 )


end0 = time.time()
nc    = cImageD11.connectedpixels( float_im, labelc, 1000 )
end1   = time.time()
rc    = cImageD11.blobproperties( float_im, labelc, nc, 0 )
cImageD11.blob_moments(rc)
end2   = time.time()
print(nc,"%.3f %.3f"%((end1-end0)*1000,(end2-end1)*1000))
wfloatim = np.where( float_im > 1000, float_im, float_im)
end0 = time.time()
nw    = cImageD11.localmaxlabel( wfloatim, labelm, work )
end1   = time.time()
rw    = cImageD11.blobproperties( wfloatim, labelm, nw, 0 )
cImageD11.blob_moments(rw)
end2   = time.time()
print(nw,"%.3f %.3f"%((end1-end0)*1000,(end2-end1)*1000))
if 0:
    pks=np.array(pks).T