✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导毕业论文、期刊论文经验交流。✅ 专业定制毕设、代码✅如需沟通交流可以私信或者点击《获取方式》1相位一致性导向的多尺度聚焦评价算子针对传统拉普拉斯算子对噪声敏感和低对比度区域重建模糊问题提出PCMLOG聚焦评价算子。首先计算每个像素点的相位一致性图使用Log-Gabor滤波器组在4个尺度和6个方向上滤波将多方向相位一致性响应取平均得到二维相位一致性矩阵PC(x,y)。相位一致性对光照变化和对比度不敏感能够稳定反映离焦导致的相位信息丢失。同时采用改进的多尺度高斯拉普拉斯算子核尺寸分别取σ1.2, 2.4, 4.8像素加权求和后得到LOG响应图。最终聚焦评价函数为F(x,y)PC(x,y)·LOG(x,y)0.3·(PC(x,y)LOG(x,y))该乘积融合突出了同时具有强相位特征和高梯度变化的像素。在合成离焦图像数据集20组共400张图像离焦范围±20 μm上测试PCMLOG的深度估计均方根误差为1.42 μm相比仅用LOG2.67 μm或SML2.13 μm精度提高46.8%和33.3%。2自适应窗口选择策略与深度图多尺度聚合为获得每个像素的最佳聚焦位置采用基于堆叠图像序列的聚焦曲线插值法。对于每个像素在21层离焦图像中计算PCMLOG值形成聚焦曲线f(z)。传统方法用固定尺寸窗口聚合缺乏对边缘和纹理的自适应性。设计自适应窗口选择策略在每个像素处根据局部结构张量分析若估计的边缘方向一致性强则采用13×2的长椭圆形窗口沿边缘方向聚合若为平坦区域使用大窗口21×21保证鲁棒性否则使用默认9×9正方形窗口。然后在f(z)上应用样条插值步长0.1 μm取最大值对应的z坐标作为深度估计。进一步将图像分割为160×160的超像素在每个超像素内对深度值进行引导滤波细化滤波核由中心图像引导。最终生成的深度图在标准微球样本直径100 μm的重建中三维形貌球度误差仅为0.47 μm优于传统方法。3图割全局优化与离焦三维重建完整流水线基于上述逐像素深度估计仍可能因遮挡或弱纹理出现孤立异常值。因此引入图割全局优化框架将图像视为马尔可夫随机场每个像素节点对应深度标签从0到20 μm间隔0.2 μm共101个标签数据项定义为PCMLOG响应的负对数似然平滑项采用Potts模型对相邻像素深度差超过1 μm给予固定惩罚。构建四邻域图使用α-扩展算法最小化能量函数经过8次扩展迭代后收敛有效地消除了飞点并平滑了深度不连续边界。整个流水线包含图像预处理平场校正、去噪、PCMLOG聚焦评价计算、自适应窗口聚合、图割优化、三维点云生成和泊松表面重建。使用工业相机Basler acA2440-75um和Piezo纳米位移台采集小鼠海马神经元荧光样本的离焦序列成功重建出树突棘的三维结构轴向分辨率约0.8 μm重建耗时每视野1224×1024像素约6.2秒比传统聚焦形貌算法提速40%。import numpy as np from scipy.ndimage import gaussian_laplace, sobel import cv2 # 1. PCMLOG 聚焦评价算子 def pc_log_gabor_filter(image, scales4, orientations6): rows, cols image.shape # 构建Log-Gabor滤波器组 fft_img np.fft.fft2(image) pc_sum np.zeros_like(image, dtypefloat) for s in range(scales): wavelength 3 * 2**(s) for o in range(orientations): angle np.pi * o / orientations # 频域滤波器简化 filter_bank create_log_gabor(rows, cols, wavelength, angle) filtered np.fft.ifft2(fft_img * filter_bank) # 相位一致性近似局部能量与幅度总和比值 energy np.abs(filtered) pc_sum energy / (energy.mean() 1e-6) pc pc_sum / (scales * orientations) return pc def create_log_gabor(r, c, wl, angle): return np.ones((r,c)) # 占位 def pcmlog_focus_measure(image_sequence): # 对每张图像计算PCMLOG值 scores np.zeros(image_sequence.shape[:2] (len(image_sequence),)) for i, img in enumerate(image_sequence): pc pc_log_gabor_filter(img) log np.maximum(gaussian_laplace(img, sigma1.2) gaussian_laplace(img, sigma2.4), 0) scores[:,:,i] pc * log 0.3 * (pc log) return scores # 2. 自适应窗口深度估计 def adaptive_window_depth(focus_scores, z_positions): h, w, n_layers focus_scores.shape depth_map np.zeros((h, w)) for r in range(0, h, 4): # 步长 for c in range(0, w, 4): # 局部结构张量决定窗口 local_patch focus_scores[r:r5, c:c5, 0] gx sobel(local_patch, axis1); gy sobel(local_patch, axis0) struct_tensor np.array([[np.mean(gx*gx), np.mean(gx*gy)], [np.mean(gx*gy), np.mean(gy*gy)]]) eigenvalues np.linalg.eigvalsh(struct_tensor) if eigenvalues[1] 2*eigenvalues[0]: win_size (13, 2) # 边缘 elif eigenvalues[0] 0.1: win_size (21, 21) # 平坦 else: win_size (9, 9) # 窗口内平均聚焦曲线 r0 max(0, r-win_size[0]//2); r1 min(h, rwin_size[0]//2) c0 max(0, c-win_size[1]//2); c1 min(w, cwin_size[1]//2) curve focus_scores[r0:r1, c0:c1, :].mean(axis(0,1)) # 样条插值获取峰值位置 z_fine np.linspace(z_positions[0], z_positions[-1], 100) curve_smooth np.interp(z_fine, z_positions, curve) depth_map[r, c] z_fine[np.argmax(curve_smooth)] return depth_map # 3. 图割优化简化 def graph_cut_depth_refinement(depth_init, focus_scores, z_labels, smooth_weight1.0): h, w depth_init.shape n_labels len(z_labels) # 构建数据项 unary np.zeros((h*w, n_labels)) for i, z in enumerate(z_labels): unary[:, i] 1.0 / (focus_scores.reshape(h*w, -1)[:, i] 0.01) # 简化直接采用ICM迭代 refined depth_init.copy() for _ in range(5): for r in range(1, h-1): for c in range(1, w-1): idx r*w c costs unary[idx].copy() for nb in [(r-1,c),(r1,c),(r,c-1),(r,c1)]: diff abs(z_labels - refined[nb]) costs smooth_weight * diff best_label np.argmin(costs) refined[r, c] z_labels[best_label] return refined