一起养成写作习惯!这是我参加「日新方案 6 月更文应战」的第18天,点击检查活动详情。

欢迎关注我的大众号 [极智视界],获取我的更多笔记共享

  大家好,我是极智视界,本文介绍一下 图画处理中对掩膜 mask 和 ROI 的了解。

  掩膜的概念之前在传统图画处理顶用的比较多,而进来深度学习中比较火热的如:(1) 自监督顶用 mask 做一些 类似 “完形填空” 的数据增强;(2) swin transformer 等新模型中关于 mask 的一些应用等。以上能够看出 mask 在深度学习范畴也能发展重要作用。为了更好的表达,这里我们用传统图画处理的方法来介绍 mask 和 ROI,和深度学习中使用的 mask 原理上是相同的。

1. 对 ROI 的了解

  对 ROI 的了解较简单,ROI 即感兴趣区域,即要操作的区域。

2. 对掩模的了解

  • 掩模是 8 位单通道图画 (灰度图 / 二值图);
  • 掩模某个方位假如为 0,则在此方位上的操作不起作用;
  • 掩模某个方位假如不为 0,则在此方位上的操作会起作用,即 ROI 区域;
  • 能够用来提取不规则 ROI;

  暗示:

  source      mask       dst
125 100 85   0  0  0   0  0  0
66  25  35   0 255 0   0  25 0
120 125 100  0  0  0   0  0  0

3. 为什么要用图画掩模

  关于规则的 ROI,比方最常用的正矩形(Rect)来说能够很容易获取到感兴趣区域的图画数据,如下:

for(int y = rect.tl().y; y < rect.br().y; ++y)
{
	uchar* imgRow = img.data + y * img.step;
	for(int x = rect.tl().x; x < rect.br().x; ++x)
	{
		imgRow[x]...
	}
}

  可是关于不规则的 ROI,则很难直接提取到感兴趣区域内的图画数据,这个时分掩模的作用就体现出来了。假定掩模图画尺度和源图画的巨细共同,则:

cv::Mat dst = cv::Mat::zeros(Size(img.cols, img.rows), CV_8UC1);
for(int y = 0; y < img.rows; ++y)
{
	uchar* imgRow = img.data + y * img.step;
	uchar* maskRow = mask.data + y * img.step;
	uchar* dstRow = dst.data +y * img.step;
	for(int x = 0; x < img.cols; ++x)
	{
		if(maskRow[x] > 0)
		{
			dstRow[x] = imgRow[x]...
		}
	}
}

4. 使用掩膜进行图画交融

  使用掩模完成图画交融示例:

极智AI | 图像处理中对掩膜 mask 和 ROI 的理解

  以大将右侧 opencv 的 Logo 交融到左边 车辆图画中,能够发现一个特点是:opencv Logo 是不规则的,这个时分用一个和 右侧原图相同巨细的 mask 来做掩膜是很合适的。图画交融后的作用如下:

极智AI | 图像处理中对掩膜 mask 和 ROI 的理解

  好了,以上共享了 图画处理中对掩膜 mask 和 ROI 的了解,希望我的共享能对你的学习有一点协助。


 【大众号传送】

《极智AI | 图画处理中对掩膜 mask 和 ROI 的了解》


极智AI | 图像处理中对掩膜 mask 和 ROI 的理解