Skip to content

Commit

Permalink
fix minor bug in create random boxes
Browse files Browse the repository at this point in the history
  • Loading branch information
landang14 committed Mar 28, 2024
1 parent a1663cf commit 94df71f
Showing 1 changed file with 9 additions and 160 deletions.
169 changes: 9 additions & 160 deletions programs/e2tomo_annotate.py
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,7 @@ def __init__(self, application,options,data=None,annotate=None):
self.bxlay.setColumnStretch(70,70)


self.random_bx_bt = QtWidgets.QPushButton("Create Random Boxes")
self.random_bx_bt = QtWidgets.QPushButton("Random Bg Box")
self.random_sparse_checkbox = QtWidgets.QCheckBox("Sparse")
self.random_sparse_checkbox.setChecked(True)

Expand Down Expand Up @@ -1716,32 +1716,27 @@ def do_morp_dilate(self):


def random_bx_bt_clicked(self):

try:
no_box = int(self.random_bx_sb.getValue())
except:
print("Number of boxes needed to be integer")
return
pos_annotate = self.get_segtab().get_selected_annotate().process("threshold.binary",{"value":0.1})
#Dilating selected so that the background is not overlapped.
pos_np_dilated = ndi.binary_dilation(to_numpy(pos_annotate),iterations=self.bsz_vs.value//2+25)
#self.img_view.set_data(self.get_annotation(),from_numpy(pos_np_dilated))
possible_boxes = list(zip(*np.where(pos_np_dilated==0)))
try:
pos_annotate = self.get_segtab().get_selected_annotate().process("threshold.binary",{"value":0.1})
pos_np_dilated = ndi.binary_dilation(to_numpy(pos_annotate),iterations=self.bsz_vs.value//2+25)
possible_boxes = list(zip(*np.where(pos_np_dilated==0)))
except:
temp_dim=np.zeros([self.img_view.get_data_dims()[0],self.img_view.get_data_dims()[1]])
possible_boxes = list(zip(*np.where(temp_dim==0)))

#ind = np.random.randint(0, len(possible_boxes), no_box)
if self.random_sparse_checkbox.isChecked():
ind = np.random.randint(0, len(possible_boxes)//100, no_box)*100
else:
ind = np.random.randint(0, len(possible_boxes), no_box)

# xs = np.random.randint(self.bsz_vs.value//2,self.img_view.get_data_dims()[0]-self.bsz_vs.value//2,no_box)
# ys = np.random.randint(self.bsz_vs.value//2,self.img_view.get_data_dims()[1]-self.bsz_vs.value//2,no_box)
box_index = self.current_box_index_sp.value()
for i in ind:
self.boxes.append([possible_boxes[i][1],possible_boxes[i][0],self.get_zpos(),1,box_index])
#self.boxes.append([xs[i],ys[i],self.get_zpos(),1,box_index])
self.add_boxes(size=int(self.bsz_vs.value))
#self.img_view.updateGL()


def clear_bx_bt_clicked(self):
Expand Down Expand Up @@ -3764,14 +3759,7 @@ def set_border_voxels_to_one(matrix):
xrot, yrot, zrot = self.target.img_view.reverse_transform_point([center[0],center[1],self.target.img_view.nz//2+center[2]], self.target.img_view.get_xform())
xform=Transform({"type":"eman","alt":self.target.img_view.alt,"az":self.target.img_view.az,"tx":self.target.img_view.nx//2+xrot,"ty":self.target.img_view.ny//2+yrot,"tz":self.target.img_view.nz//2+zrot})
subvol=self.target.img_view.get_full_annotation().get_rotated_clip(xform,(side_length,side_length,side_length),0)


#subvol = from_numpy(np.ones((2*self.w_line,2*self.w_line,2*self.w_line)))
#subvol.process_inplace("mask.paint",{"x":self.w_line,"y":self.w_line,"z":self.w_line,"r1":self.w_line,"v1":value,"r2":self.w_line,"v2":0})
self.target,img_view.full_annotation.set_rotated_clip(xform,from_numpy(np.where(fill_vol>0,val,to_numpy(subvol))))
#self.img_view.full_annotation.set_rotated_clip(xform,subvol*2)
# full_vol=from_numpy(np.where(fill_vol>0,value,to_numpy(self.img_view.full_annotation)))
# self.img_view.full_annotation = full_vol.process("xform",{"transform":self.img_view.xform})
self.target.img_view.force_display_update()
self.target.img_view.updateGL()

Expand Down Expand Up @@ -3882,14 +3870,6 @@ def __init__(self,target) :
self.target = target
ext_gbl = QtWidgets.QGridLayout(self)
self.current_z = self.target.zc_spinbox.value()
# self.rf_path_text = QtWidgets.QLineEdit()
# self.vol_path_text = QtWidgets.QLineEdit()
#
# self.vol_browser_bt = QtWidgets.QPushButton("Browse")
# self.map_ptcls_bt = QtWidgets.QPushButton("Map ptcls to tomogram")
# self.show_ptcls_bt = QtWidgets.QPushButton("Show ptcls on tomogram")
# self.show_ptcls_vs = ValSlider(value=0.5,rng=(0.001,5),rounding=2,label= "Thres")
#
self.ext_class_bt = QtWidgets.QPushButton("Extrapolate Class")
self.ext_all_bt = QtWidgets.QPushButton("Extrapolate All")
self.ext_from_spinbox = QtWidgets.QSpinBox()
Expand All @@ -3898,10 +3878,6 @@ def __init__(self,target) :
self.ext_from_spinbox.setValue(0)



# self.n_iters_spinbox.setMinimum(1)
# self.annotate_ori=None

ext_gbl.addWidget(QtWidgets.QLabel("Apply to 2D slice. Z-thick set to 0"),0,0,1,2)
ext_gbl.addWidget(self.ext_class_bt,1,0,1,1)
ext_gbl.addWidget(self.ext_all_bt,1,1,1,1)
Expand All @@ -3922,9 +3898,6 @@ def get_target_selected(self):
for item in self.target.get_segtab().get_whole_branch(sel):
sels.append(item)

# if len(sels) == 0:
# print("Select a single class or grouping before extrapolate operation")
# return 0,None

return sels

Expand Down Expand Up @@ -4022,14 +3995,10 @@ def fill_hole_bin(self):

def bin_detect_bt_clicked(self):
self.target.save_current_state()

sel = self.get_selected_item()
if not sel:
print("Choose only one class for detect feature")
return
# if len(sel) == 0:
# print("Please select the class feature to detect")
# return


self.target.get_segtab().get_whole_annotate(sel).write_image("ori_detect.hdf")
Expand Down Expand Up @@ -4094,7 +4063,6 @@ def __init__(self,target) :
templ_gbl.addWidget(self.create_template_bt,1,0,1,2)
templ_gbl.addWidget(self.template_match_bt,1,2,1,2)
templ_gbl.addWidget(self.tplt_threshold_vs,2,0,1,4)
#templ_gbl.addWidget(self.tplt_low_pass_vs,3,0,1,4)
self.setLayout(templ_gbl)

self.tplt_match_launcher = QtWidgets.QWidget()
Expand All @@ -4115,8 +4083,6 @@ def __init__(self,target) :
self.tplt_threshold_vs.valueChanged.connect(self.binarize_tplt_match)




def load_template(self):
self.tplt_browser = EMBrowserWidget(withmodal=True,multiselect=False)
self.tplt_browser.ok.connect(self.tplt_browser_ok)
Expand All @@ -4142,7 +4108,6 @@ def tplt_match_launched(self):
except:
pass
os.system("e2proc3d.py tmp_ccc.hdf tmp_ccc_inv.hdf --mult=-1")
#tplt_match_map = EMData("tmp_ccc_inv.hdf")
self.tplt_threshold_vs.setValue(0.81)
return

Expand Down Expand Up @@ -4175,10 +4140,6 @@ def get_cmd():
return self.cmd






class Fila_Tab(QtWidgets.QWidget):
def __init__(self,target) :
QtWidgets.QWidget.__init__(self,None)
Expand Down Expand Up @@ -4224,9 +4185,6 @@ def new_item(parent, text, val=None):
self.p_button.clicked[bool].connect(self.p_button_clicked)
self.c_button.clicked[bool].connect(self.c_button_clicked)




def tree_to_dict(self,parent):
childCount = parent.childCount()
if not childCount:
Expand Down Expand Up @@ -4541,7 +4499,6 @@ def label_objs(self,ask_user=True):
self.target.save_current_state()
self.target.activateWindow()
self.target.get_annotation().process_inplace("threshold.rangetozero",{"maxval":(val+0.1),"minval":(val-0.1)})
# # self.target.annotate += val*from_numpy(ndi.binary_opening(to_numpy(mask),iterations=n_iters))
self.labeled_ann,self.num = ndi.label(to_numpy(raw_mask))
self.loc=ndi.find_objects(self.labeled_ann,self.num)
t_mask = np.zeros(self.labeled_ann.shape)
Expand All @@ -4558,7 +4515,6 @@ def label_objs(self,ask_user=True):
name = sel.text(1)
self.target.get_segtab().add_child(child_l=[str(ind),name+"_"+str(i),"-1"])
self.target.get_segtab().update_sets()
#self.target.annotate += ind*(raw_mask)
t_mask += np.where(self.labeled_ann==i,ind,0)
self.target.annotate += from_numpy(t_mask)
print("number of object detected:", self.num)
Expand All @@ -4567,109 +4523,11 @@ def label_objs(self,ask_user=True):
self.n_objects_text.setText(str(count))


# def count_objs(self):
# thres=self.n_obj_thres_vs.value
# #n_iters = int(self.morp_n_iters_sp.value())
# sel = self.get_selected_item()
# #self.counted_item.append(sel)
# #val,raw_mask = self.get_target_selected()
# if sel:
# val = int(sel.text(0))
# raw_mask = self.target.get_segtab().get_whole_annotate(sel)
# else:
# print("Select a class to count")
# return
#
# # if raw_mask:
# self.target.get_annotation().process_inplace("threshold.rangetozero",{"maxval":(val+0.1),"minval":(val-0.1)})
# # self.target.annotate += val*from_numpy(ndi.binary_opening(to_numpy(mask),iterations=n_iters))
# # mask, num = ndi.label(to_numpy(self.target.get_annotation()))
# self.labeled_ann,self.num = ndi.label(to_numpy(raw_mask))
# self.loc=ndi.find_objects(self.labeled_ann,self.num)
# t_mask = np.zeros(self.labeled_ann.shape)
# count = 0
# self.area_vol = []
# self.objs = []
# open_lab=to_numpy(raw_mask)
# # current_item = self.target.get_segtab().tree_set.currentItem()
# # current_item.takeChildren()
#
# for i in range(1,self.num+1):
# #area_temp=len(np.where(open_lab[self.loc[i-1]]>0)[0])
# area_temp=len(np.where(open_lab[self.loc[i-1]]>0)[0])
# #print(open_lab[loc[i]].shape[0],open_lab[loc[i]].shape[1])
# if area_temp >= thres:
# count = count+1
# self.area_vol.append(area_temp)
# self.objs.append(open_lab[self.loc[i-1]])
# ind = self.target.get_segtab().get_unused_index()
# name = current_item.text(1)
# self.target.get_segtab().add_child(child_l=[str(ind),name+"_"+str(i),"-1"])
# self.target.get_segtab().update_sets()
# #self.target.annotate += *(raw_mask)
# t_mask += np.where(self.labeled_ann==i,ind,0)
#
# self.target.annotate += from_numpy(t_mask)
# print("number of object detected:", self.num)
# self.target.img_view.set_data(self.target.data, self.target.annotate)
# del t_mask
# self.n_objects_text.setText(str(count))



# def calc_convex_hull(self):
# def is_point_in_polygon(point,vertices):
# points = np.array([[x[0],x[1]] for x in vertices])
# poly_path = mplPath.Path(points)
# return poly_path.contains_point(point)
# def polygon(points):
# min_r = int(min([x[0] for x in points]))
# max_r = int(max([x[0] for x in points]))
# min_c = int(min([x[1] for x in points]))
# max_c = int(max([x[1] for x in points]))
# rr = []
# cc = []
# for r in range(min_r,max_r+1):
# for c in range(min_c,max_c+1):
# if is_point_in_polygon([r,c],points):
# rr.append(r)
# cc.append(c)
# return np.array(rr), np.array(cc)
#
#
#
# open_lab=ndi.binary_opening(to_numpy(img),iterations=1)
# labeled,num = ndi.label(open_lab>0.5)
#
# for i in range(1,num+1):
# o1 = np.ma.masked_where(labeled!=i,labeled)
# p1 = np.nonzero(o1)
# points = np.stack((p1[0], p1[1]), axis=-1)
# hull = ConvexHull(points=points,qhull_options='QG4')
# pts = []
# for simplex in hull.vertices:
# pts.append([points[simplex,0],points[simplex,1]])
# rr,cc = polygon(pts)
# labeled[rr,cc]=i
# return labeled
#
# def show_convex_hull(self):
# sel = self.get_selected_item()
# if sel not in self.counted_item:
# self.count_objs()
# convex = self.calc_convex_hull(img=self.target.annotate)
# self.target.img_view.set_data(self.target.data, from_numpy(convex))
# del convex



def calc_stat(self):
apix = self.apix_vs.value
sel = self.get_selected_item()
#if sel not in self.counted_item:
#val = int(sel.text(0))
#raw_mask = self.target.get_segtab().get_whole_annotate(sel)
#if len(self.target.get_segtab().get_whole_branch(sel))==1:
self.label_objs(ask_user=False)
if (self.stat_combo.currentText() == "Center of Mass"):
self.cent_mass = ndi.center_of_mass(self.target.get_annotation().numpy(),self.labeled_ann,[i+1 for i in range(len(self.objs))])
Expand Down Expand Up @@ -4709,15 +4567,10 @@ def calc_stat(self):
a = from_numpy(obj)
proj = a.process("misc.directional_sum",{"axis":"z"}).process("threshold.binary",{"value":0.1})
im = proj.numpy()
# sx = ndi.sobel(im, axis=0, mode='constant')
# sy = ndi.sobel(im, axis=1, mode='constant')
# sob = np.hypot(sx, sy)
# from_numpy(sob).write_image('peri_temp_2.hdf')
peri_temp = self.calc_perimeter(im)
print("Largest Perimeter of Obj",i,":", peri_temp, "pixel")
print("Largest Perimeter of Obj",i,":", peri_temp*apix,"A")
#[data.process("xform",{"transform":xform}).process("misc.directional_sum",{"first":nz//2-layers,"last":nz//2+layers,"axis":"z"}) for data in self.datalist]
#self.projs = [data.process("xform",{"transform":Transform()}).process("misc.directional_sum",{"first":nz//2-layers,"last":nz//2+layers,"axis":"z"}) for data in self.datalist]

else:
return

Expand All @@ -4737,8 +4590,6 @@ def calc_perimeter(self,image):
return np.count_nonzero(newdata)




class Specific_Tab(QtWidgets.QWidget):
def __init__(self,target) :
QtWidgets.QWidget.__init__(self,None)
Expand Down Expand Up @@ -4771,7 +4622,6 @@ def __init__(self,target) :
self.detect_plane_bt.clicked[bool].connect(self.detect_plane)
self.select_anchors_bt.clicked[bool].connect(self.select_anchors_bt_clicked)


self.gra_tab = QtWidgets.QWidget()
self.gtlay = QtWidgets.QVBoxLayout(self.gra_tab)
self.dark_gra_button = QtWidgets.QPushButton("Dark granule")
Expand Down Expand Up @@ -4802,7 +4652,6 @@ def detect_plane(self):
print(a/np.pi*180)

alt = angles[1]/np.pi*180
#print("ALT", alt)
self.target.get_inspector().alts.setValue(alt)
self.target.get_inspector().ns.setValue(0)
self.target.img_view.del_shape("p1")
Expand Down

0 comments on commit 94df71f

Please sign in to comment.