一緒に書く習慣をつけましょう!「ナゲッツデイリーニュープラン・6月アップデートチャレンジ」に参加して18日目です。クリックしてイベントの詳細をご覧ください。
欢迎关注我的公众号 [极智视界],获取我的更多笔记分享
みなさん、こんにちは。JizhiVisionです。この記事では、画像処理におけるマスクとROIの理解について紹介します。
マスクの概念は、以前は従来の画像処理でより多く使用されていましたが、次のような深層学習でより一般的です。(1)マスクを使用して、自己監視の「クローズ」と同様のデータ拡張を行う。(2)スウィントランスフォーマー新しいモデルでのマスクのいくつかのアプリケーションなど。以上のことから、深層学習の分野でもマスクが重要な役割を果たしていることがわかります。より良い表現のために、ここでは従来の画像処理を使用して、深層学習で使用されるマスクと基本的に同じマスクとROIを導入します。
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.なぜイメージマスクを使用するのか
最も一般的に使用される通常の長方形(Rect)などの通常のROIの場合、関心領域の画像データは次のように簡単に取得できます。
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.マスクを使用した画像融合
マスクを使用した画像融合の例:
上の写真では、右側のopencvのロゴが左側の車両画像に溶け込んでいますが、opencvのロゴが不規則であることが特徴ですが、現時点では同じマスクを使用するのが最適です。右の元の画像と同じサイズ。画像融合の効果は次のとおりです。
さて、上記は画像処理におけるマスクとROIの理解を共有しました。私の共有があなたの研究に役立つことを願っています。
【公開番号送信】