【图像处理处罚】——掩码 [复制链接]
发表于 2025-11-6 02:27:06 | 显示全部楼层 |阅读模式

一、掩码的界说与本质

掩码是一种与原始数据(通常是图像或矩阵)具有雷同形状的数组或矩阵,其元素用于控制对原始数据的操纵。它本质上是一种筛选或过滤机制,通过对原始数据的每个元素与掩码中相应元素的组合操纵,来决定该元素是否被保存、修改或抛弃。
二、掩码的范例及特点

二值掩码(Binary Mask)



  • 特点

    • 仅包罗两种元素值,通常是 0 和 1 或 0 和 255。
    • 元素值 0 体现对应位置的原始数据将被屏蔽或扫除,而元素值 1 或 255 体现对应位置的原始数据将被保存或选中。

  • 应用场景

    • 对象提取: 当须要从复杂的图像中提取出感爱好的对象时,可通过各种图像分割算法(如基于阈值的分割、基于边沿的分割、基于地区的分割等)天生二值掩码。 上述代码利用 cv2.threshold 函数将图像根据 127 的阈值转换为二值图像,然后利用 cv2.bitwise_and 函数将原始图像与自身按位与,利用天生的二值掩码提取出对象。
      1. import cv2
      2. import numpy as np
      3. # 读取图像
      4. image = cv2.imread('example_image.jpg', cv2.IMREAD_GRAYSCALE)
      5. # 设定阈值,将图像二值化
      6. _, binary_mask = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
      7. # 提取对象
      8. extracted_object = cv2.bitwise_and(image, image, mask=binary_mask)
      复制代码
    • 地区屏蔽: 可用于屏蔽图像中不须要的部门,只保存感爱好的地区。 这里利用 cv2.rectangle 在零矩阵上创建一个矩形地区的二值掩码,再通过 cv2.bitwise_and 屏蔽掉矩形地区外的部门。
      1. import cv2
      2. import numpy as np
      3. image = cv2.imread('example_image.jpg')
      4. height, width, _ = image.shape
      5. # 创建矩形区域的二值掩码
      6. binary_mask = np.zeros((height, width), dtype=np.uint8)
      7. cv2.rectangle(binary_mask, (100, 100), (300, 300), 255, -1)
      8. # 屏蔽除矩形区域外的部分
      9. masked_image = cv2.bitwise_and(image, image, mask=binary_mask)
      复制代码

灰度掩码(Grayscale Mask)



  • 特点

    • 元素值在 0 到 255 之间。
    • 元素值的巨细体现对原始数据的操纵水平,比方作为权重,可实现更平滑的过渡结果。

  • 应用场景

    • 图像融合: 当须要将两张图像无缝融适时,灰度掩码可作为权重图。 此代码中,利用 np.linspace 创建一个水平方向的线性渐变灰度掩码,将其扩展到三个通道,作为权重对两张图像举行融合。
      1. import cv2
      2. import numpy as np
      3. image1 = cv2.imread('image1.jpg')
      4. image2 = cv2.imread('image2.jpg')
      5. # 确保图像大小相同
      6. if image1.shape == image2.shape:
      7.     height, width, _ = image1.shape
      8.     # 创建一个简单的线性渐变的灰度掩码
      9.     grayscale_mask = np.tile(np.linspace(0, 1, width).reshape(1, width), (height, 1))
      10.     grayscale_mask = np.dstack((grayscale_mask, grayscale_mask, grayscale_mask)).astype(np.float32)
      11.     # 图像融合
      12.     blended_image = image1.astype(np.float32) * (1 - grayscale_mask) + image2.astype(np.float32) * grayscale_mask
      13.     blended_image = blended_image.astype(np.uint8)
      复制代码
    • 图像调解: 可用于局部图像加强或减弱。 这里创建了一个中央亮附近暗的圆形灰度掩码,利用 cv2.GaussianBlur 使其平滑,然后用于加强图像中央地区。
      1. import cv2
      2. import numpy as np
      3. image = cv2.imread('example_image.jpg')
      4. # 创建一个中间亮四周暗的灰度掩码
      5. height, width, _ = image.shape
      6. center_x, center_y = width // 2, height // 2
      7. grayscale_mask = np.zeros((height, width), dtype=np.float32)
      8. cv2.circle(grayscale_mask, (center_x, center_y), min(center_x, center_y), 1, -1, cv2.LINE_AA)
      9. grayscale_mask = cv2.GaussianBlur(grayscale_mask, (15, 15), 0)
      10. # 增强图像中心区域
      11. enhanced_image = (image.astype(np.float32) * grayscale_mask).astype(np.uint8)
      复制代码

频率域掩码(Frequency Domain Mask)



  • 特点

    • 通常在对图像举行傅里叶变动后利用,通过修改频率域中的幅值信息,对图像举行频域滤波。

  • 应用场景

    • 图像滤波: 可实现高通、低通、带通、带阻等滤波结果。 上述代码起首将图像举行傅里叶变动并将零频分量移到中央,然后创建一个低通滤波器的圆形掩码,应用该掩码后再举行逆傅里叶变动得到滤波后的图像。
      1. import cv2
      2. import numpy as np
      3. import numpy.fft.fft2 as fft2
      4. import numpy.fft.ifft2 as ifft2
      5. import numpy.fft.fftshift as fftshift
      6. import numpy.fft.ifftshift as ifftshift
      7. image = cv2.imread('example_image.jpg', cv2.IMREAD_GRAYSCALE)
      8. # 傅里叶变换
      9. f = fft2(image)
      10. fshift = fftshift(f)
      11. rows, cols = image.shape
      12. crow, ccol = rows // 2, cols // 2
      13. # 低通滤波器掩码,截止频率为 30
      14. low_pass_mask = np.zeros((rows, cols), np.uint8)
      15. cv2.circle(low_pass_mask, (ccol, crow), 30, 1, -1)
      16. # 应用掩码
      17. fshift_filtered = fshift * low_pass_mask
      18. f_ishift = ifftshift(fshift_filtered)
      19. filtered_image = np.real(ifft2(f_ishift))
      20. filtered_image = np.uint8(filtered_image)
      复制代码

三、掩码的实现细节

创建掩码

可利用各种图像处理处罚库(如 OpenCV、NumPy)的函数创建差别形状和特性的掩码。 比方,利用 cv2.circle、cv2.rectangle 等创建二值形状掩码,利用 np.linspace、np.tile 等创建灰度渐变掩码。
应用掩码



  • 按位运算(针对二值掩码): 利用 cv2.bitwise_and、cv2.bitwise_or、cv2.bitwise_xor 等函数将二值掩码应用于图像,举行图像的提取、屏蔽、反转等操纵。
  • 乘法运算(针对灰度掩码): 对于灰度掩码,可将原始图像和掩码举行元素级乘法操纵,留意数据范例的匹配和转换,确保结果在公道范围。
  • 频域操纵(针对频率域掩码): 先将图像举行傅里叶变动,应用频率域掩码后再举行逆傅里叶变动。利用 numpy.fft.fft2、numpy.fft.ifft2 等函数举行变动,利用 numpy.fft.fftshift、numpy.fft.ifftshift 举行零频分量的移位操纵。
四、掩码的上风与留意事项



  • 上风

    • 机动性:可以根据差别的需求创建各种形状和特性的掩码,实现复杂的图像处理处罚操纵。
    • 可扩展性:可以或许与其他图像处理处罚技能联合,实现更高级的功能,如联合形态学操纵、特性提取等。

  • 留意事项

    • 数据范例:在操纵过程中,要留意原始数据和掩码的数据范例,确保操纵的有效性和结果的正确性。
    • 尺寸匹配:掩码的尺寸必须与原始数据的尺寸严酷匹配,否则会导致错误。

掩码在图像处理处罚和盘算机视觉中是一种强盛的工具,通过差别范例的掩码可以实现多种复杂的操纵,从简单的地区提取和屏蔽到复杂的频域滤波和图像融合,为实现各种图像处理处罚任务提供了机动且高效的方法。在现实应用中,须要根据具体任务选择符合的掩码范例和实现方法,并留意操纵中的数据范例和尺寸匹配等细节。
五、参考文献

参考论文地点:
1703.06870v3
项目地点:
facebookresearch/Detectron: FAIR's research platform for object detection research, implementing popular algorithms like Mask R-CNN and RetinaNet.


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表