组织透明化小鼠心脏荧光灶计数:背景去除难题求助
组织透明化小鼠心脏光片成像荧光灶计数问题
研究背景
我正在开展一项研究:对组织透明化小鼠心脏进行光片显微镜成像,获取完整器官图像。设备会沿深度方向将图像切成间隔数微米的切片,最终生成包含数百张切片的大型OME-TIFF文件(大小达数GB)。
目标与样本特征
需要计数心脏组织内的荧光灶:
- 人工识别荧光灶难度低(部分切片中荧光灶像巧克力豆饼干一样明显),但人工计数不可行
- 注:原始切片可见散在荧光灶,已标记图像中荧光灶被明确标注
当前处理方案
我已做过初步背景去除,但效果不佳,因此使用以下IslandCounter_hist类的counter函数进行计数——该函数会过滤过大区域以及上一切片中重复的荧光灶:
class IslandCounter_hist: def counter(self, array, visited_prev): def in_array(h, w): return 0 <= h < len(array) and 0 <= w < len(array[0]) def neighbours(node): a, b = node dir = [(-1, 0), (0, 1), (1, 0), (0, -1)] return [(h, w) for h, w in [(a + i, b + j) for i, j in dir] if in_array(h, w)] def dfs(node, recursion): visited.add(node) recursion += 1 for v in neighbours(node): if recursion == 8000: # 防止在大块区域卡住,数值为经验值 break if array[v[0]][v[1]] > 0 and v not in visited: dfs(v, recursion) islands = 0 dist_array = np.array([]) visited = set() sub_visited = set() for i in range(len(array)): for j in range(len(array[0])): node = (i, j) recursion = 0 if array[i][j] > 0 and node not in visited: dfs(node, recursion) # 根据ImageJ手动计数的数百个样本设置面积阈值 if 9 <= (len(visited) - len(sub_visited)) <= 264 and node not in visited_prev: dist_array = np.append(dist_array, len(visited) - len(sub_visited)) islands += 1 sub_visited = visited.copy() else: sub_visited = visited.copy() return islands, visited, dist_array
现存问题
- 荧光灶特征难以准确定义:亮度、大小均存在差异,仅能通过手动计数得到像素面积阈值(9-264像素)
- 背景残留过多,导致假阳性结果大量出现
- 尝试过的方法效果不佳:阈值处理要么假阳性过多要么丢失目标;去除“壁状”结构未成功;OpenCV轮廓提取效果混乱
需求
- 在不丢失器官内部目标的前提下有效去除背景
- 对现有计数函数的优化建议
内容的提问来源于stack exchange,提问作者shakuras
相关产品推荐
相关产品推荐

