医学图像处理:如何提取框选/掩码区域图案并粘贴至另一医学图像?
医学图像区域提取与粘贴实现方法
针对你需要提取框选/掩码区域并粘贴到另一张医学图像的需求,以下是两种常用的实现方案,基于Python的OpenCV和NumPy库完成,适合处理常见的医学图像格式(如PNG、DICOM等):
一、矩形框选区域的提取与粘贴
如果是规则的矩形区域,操作流程简单直接:
- 加载图像
医学图像多为灰度图,加载时指定灰度模式;若是彩色图像可省略参数。 - 手动框选目标区域
用OpenCV的交互工具选择要提取的矩形,也可以直接输入坐标。 - 复制粘贴到目标图像
将提取的区域覆盖到目标图像的指定位置。
示例代码:
import cv2 import numpy as np # 加载源图像与目标图像(DICOM格式需用pydicom库加载,见下方注意事项) src_img = cv2.imread('source_med_img.png', cv2.IMREAD_GRAYSCALE) dst_img = cv2.imread('target_med_img.png', cv2.IMREAD_GRAYSCALE) # 手动框选源图像中的提取区域 roi = cv2.selectROI("选择提取区域", src_img, showCrosshair=True, fromCenter=False) x1, y1, w, h = roi selected_region = src_img[y1:y1+h, x1:x1+w] # 手动选择目标图像的粘贴位置 dst_roi = cv2.selectROI("选择粘贴位置", dst_img, showCrosshair=True, fromCenter=False) x_dst, y_dst, _, _ = dst_roi # 执行粘贴(确保目标位置尺寸与提取区域一致) dst_img[y_dst:y_dst+h, x_dst:x_dst+w] = selected_region # 查看并保存结果 cv2.imshow("粘贴结果", dst_img) cv2.waitKey(0) cv2.imwrite('pasted_result.png', dst_img)
二、任意掩码区域的提取与粘贴
针对不规则区域(比如分割模型生成的掩码、手动绘制的区域),需要借助掩码图像来精准提取:
- 准备掩码图像:单通道图像,白色(255)代表要提取的区域,黑色(0)为背景。
- 提取掩码覆盖的源图像内容
- 将提取内容粘贴到目标图像的对应位置
示例代码:
import cv2 import numpy as np src_img = cv2.imread('source_med_img.png', cv2.IMREAD_GRAYSCALE) dst_img = cv2.imread('target_med_img.png', cv2.IMREAD_GRAYSCALE) mask = cv2.imread('region_mask.png', cv2.IMREAD_GRAYSCALE) # 提前准备的掩码 # 提取源图像中掩码覆盖的区域 masked_src = cv2.bitwise_and(src_img, src_img, mask=mask) # 设置粘贴位置的偏移量(dx, dy为目标图像左上角相对源掩码左上角的坐标差) dx, dy = 100, 100 # 示例偏移量,可根据需求调整 # 创建目标图像对应的掩码,将原掩码放到指定位置 dst_mask = np.zeros_like(dst_img) dst_mask[dy:dy+mask.shape[0], dx:dx+mask.shape[1]] = mask # 先清空目标图像的对应区域,再粘贴提取内容 dst_img = cv2.bitwise_and(dst_img, dst_img, mask=cv2.bitwise_not(dst_mask)) dst_img = cv2.bitwise_or(dst_img, masked_src) cv2.imshow("掩码粘贴结果", dst_img) cv2.waitKey(0) cv2.imwrite('mask_pasted_result.png', dst_img)
关键注意事项
- 处理DICOM图像:需用
pydicom库加载,代码示例:import pydicom; ds = pydicom.dcmread('med_image.dcm'); img = ds.pixel_array,后续处理逻辑与普通图像一致。 - 灰度一致性:确保源图像与目标图像的灰度范围匹配,避免粘贴后出现明显色差,可通过
cv2.normalize()做归一化处理。 - 3D医学图像:针对CT/MRI序列,可遍历每个切片执行上述操作,实现3D区域的复制粘贴。
内容的提问来源于stack exchange,提问作者copiglet
相关产品推荐
相关产品推荐

