def segment(fname, bg, datamem, datapath, block=128, nsigma=3.): """ Does a segmentation of a single file/frame """ imo = fabio.open(os.path.join(datapath, fname)) # data # print(fname) oname = os.path.split(os.path.splitext(fname)[0])[-1] # subtract dark and promote to float32 (without overflow on uint16 I hope) cImageD11.uint16_to_float_darksub(datamem.ravel(), bg.ravel(), imo.data.ravel()) # check offset and noise avg, sig = cImageD11.array_mean_var_cut(datamem, cut=nsigma) # remove the frelon lines datamem.shape = imo.data.shape[0] * (imo.data.shape[1] // block), block cImageD11.frelon_lines(datamem, avg + sig * nsigma) datamem.shape = imo.data.shape # overwrites datamem (should copy before if you want it avg, sig = cImageD11.array_mean_var_cut(datamem, cut=nsigma) threshold = avg + sig * nsigma # select the pixels to keep: rawmask = datamem > threshold cleanmask = rawmask.astype(np.int8) cImageD11.clean_mask(rawmask.astype(np.int8), cleanmask) # save some metadata: header = {"filename": fname} for k in ("SRCUR", "time_of_day"): if k in imo.header: header[k] = imo.header[k] spar = sparseframe.from_data_mask(cleanmask, datamem, header) return spar
def binary_clean( mask ): """ Remove the one pixel stuff """ ret = np.zeros(mask.shape, np.int8) cImageD11.clean_mask( mask.astype( np.int8 ), ret ) return ret
def segment(fname, bg): """ Does a segmentation of a single file/frame """ imb = fabio.open(fname).data - bg imc = fix_frelon_lines(imb, block=128) s = sigma_cut(imc) m = imc > s cleanmask = m.astype(np.int8) cImageD11.clean_mask(m.astype(np.int8), cleanmask) spar = to_scipy_csr(imc, cleanmask) return spar
def segment(fname, bg): """ Does a segmentation of a single file/frame """ imo = fabio.open(fname) imb = imo.data.astype(np.float32) - bg #print (type(imb)) imc = fix_frelon_lines(imb, block=128) s = sigma_cut(imc) m = imc > s cleanmask = m.astype(np.int8) cImageD11.clean_mask(m.astype(np.int8), cleanmask) spar = to_coo(imc, cleanmask, fname) spar.sigma_cut = s spar.con_labels() spar.max_labels() print(fname, spar.nmlabel) return spar
def binary_clean(mask, out=None): """ Remove the one pixel stuff """ if out is None: out = np.zeros(mask.shape, np.int8) npx = cImageD11.clean_mask(mask.astype(np.int8), out) return npx, out
def test1(self): testmask = np.zeros(self.src.shape, np.int8) npx = cImageD11.clean_mask(self.src.astype(np.int8), testmask) if 0: print('npx=', npx) print(self.src) print(self.src.view(dtype=np.int8)) print(testmask) print(testmask.sum()) self.assertTrue(self.target.sum() == npx) self.assertTrue((testmask == self.target).all())
def filt(self, input): cln = np.empty(input.shape, 'b') npx = cImageD11.clean_mask(input, cln) return cln
import numpy as np from ImageD11 import cImageD11 m = np.zeros((10,10),np.int8) mm = m.copy() m[5,5:7]=1 m[2,2]=1 cImageD11.clean_mask(m, mm) print(mm)