目次
形態学的操作
(1)オープン操作:最初に腐食してから膨張し、小さな物体を取り除くことができます。
(2)閉じる操作:最初に展開してから腐食し、小さなオブジェクトを埋めることができます。
(3)形態勾配:膨張から腐食を差し引いたもの。
(4)シルクハット:シルクハットは、元の画像とオープン操作画像の差分画像です。
(5)ブラックハット:ブラックハットは、クローズドオペレーション画像と元の画像の差分画像です。
これらの形態学的操作は、腐食と膨張に基づいています
- 腐食:アンカーポイントは最小値に置き換えられます。黒は増加し、白は減少します。
- 膨張:アンカーポイントが最大値に置き換えられます。白が増加し、黒が減少します。
オープンオペレーション
開封操作とは、最初に腐食、次に膨張を意味します。
説明する例として、単一チャネルの白黒画像を取り上げます。つまり、最初に腐食操作によって黒の領域を腐食および拡張し、次に拡張操作によって白の領域を拡張および拡張します。
小さな白い斑点がある場合は、最初に腐食操作を行い、周囲の黒で覆われ、次に拡張操作を実行します。小さな白い斑点がなくなったため、拡張操作は周囲の黒に影響を与えません。だから、開く操作で、白い点を取り除くことができます。
つまり、適切な開く操作で小さなオブジェクトを削除できます。
バイナリグラフでは、小さな白い点を削除するか、黒い点を埋めるように表示されます
クローズ操作
閉鎖操作とは、最初に膨張し、次に腐食することを意味します。
例として、単一チャネルの白黒画像を取り上げます。つまり、最初に拡張操作によって白い領域を拡張および拡張し、次に腐食操作によって黒い領域を腐食および拡張します。
小さな黒い斑点がある場合は、最初に膨張操作、次に腐食操作によって周囲の白に覆われます。小さな黒い斑点がなくなったため、腐食操作は周囲の白に影響を与えないため、閉じる操作小さな黒い点を取り除くことができます。
つまり、適切なクローズ操作で小さなオブジェクトを削除できます。
バイナリグラフでは、小さな黒い点を削除するか、白い点を埋めるように表示されます
形態学的勾配
形態学的勾配は、膨張から腐食を差し引いたものです。
説明する例として、2次元配列を取り上げましょう。左下の画像は
膨張後の操作の結果は次のとおりです
が、腐食操作は次のとおりです。
形態学的勾配は、次のように膨張から腐食を引いたものです。
トップハット
シルクハットは、元の画像とオープン操作の画像の違いの画像です。
開いた操作で小さな白いオブジェクトを削除しましたが、他の場所で変化はありません。
差が生じた後、0、つまり黒になります。差が生じた後、除去された白い領域が得られます。次に、元の画像が白で、対応する値が255であり、開封操作後の対応する値が0であり、差が255のままであるため、この領域の色は何色であるかを考慮する必要があります。まだ白、つまり元の色です。
したがって、シルクハット操作では、削除される小さな白いオブジェクトだけが表示されます。
黒い帽子
黒い帽子は、元の画像と閉じた操作の画像の違いの画像です。
クロージング操作では、小さな黒いオブジェクトを塗りつぶしましたが、他の場所では変化はありません。違いが生じた後、255、つまり黒になり
ます。他の場所で違いが生じた後、次のようになります。黒く塗りつぶされた領域を検討する必要があります。この領域の色は何色ですか。元の画像は黒なので、対応する値は0です。閉じる操作後は白になります。対応する値は255です。差は255、白になります。つまり、シルクハットの操作で得られるのは、削除された小さな白いオブジェクトです。
シルクハットブラックハット結論
- シルクハットでもブラックハットでも、元の画像と開閉操作の違いの画像が得られます。違いは白で、残りは黒です。
opencvでの形態学的操作
原子力発電API
モルフォロジーでは、地域のピクセル操作が含まれるため、カーネル内のピクセルを操作するカーネルを設計する必要があります。したがって、コアを作成する必要があります。ここでは、新しいAPIを使用します:
getStructuringElement()
Mat getStructuringElement(
int shape,
Size ksize,
Point anchor = Point(-1,-1)
);
(1)Int型の形状、要素の形状は、cv :: MorphShapesのいずれかになります。
(2)Sizeタイプのksize、構造化要素のサイズ。
(3)ポイントタイプのアンカー(デフォルト値(-1、-1))は、アンカーが中央に配置されていることを意味します。十字型要素の形状のみがアンカー位置に依存することに注意してください。その他の場合、アンカーは形態学的操作から生じる動きの量を調整するだけです。
ここでは主に最初のパラメーターについて説明します。パラメーターには主に次のオプションがあります。
-(1)MORPH_RECT:長方形の構造領域。
-(2)MORPH_CROSS、十字型の構造領域。
-(3)MORPH_ELLIPSE、楕円構造領域、長方形Rect(0、0、esize.width、0。esize.height)に内接する塗りつぶされた楕円。
形態学的操作
API
void morphologyEx(
InputArray src,
OutputArray dst,
int op,
InputArray kernel,
Point anchor = Point(-1,-1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue()
);
(1)InputArrayタイプのsrc、入力画像。チャネル数は任意ですが、深さはCV_8U、CV_16U、CV_16S、CV_32F、またはCV_64Fのいずれかである必要があります。
(2)OutputArrayタイプのdst、つまりターゲットイメージは、入力イメージと同じサイズとタイプを持ちます。
(3)Intタイプop、モルフォロジー演算のタイプ。cv:: MorphTypesを参照してください。
(4)InputArrayタイプのカーネルは、構造要素を展開するために使用されます。elemenat= Mat()の場合、3 x3の長方形の構造要素を使用します。getStructuringElementを使用してカーネルを作成できます。
(5)ポイントタイプアンカー:要素内のアンカー位置。デフォルト値(-1、-1)は、要素の中心にあるアンカーを意味します。
(6)int型の反復:展開が適用される回数。
(7)int型のBorderType:ピクセル外挿法。cv:: BorderTypesを参照してください。
(8)スカラータイプのBorderValue:境界が一定の場合の境界値。
膨張や腐食と比較して、3番目のパラメーターのみが追加されます。他のパラメーターは完全に同じです。3番目のパラメーターは操作、つまりすべての形態学的操作です。がある:
enum MorphTypes{
MORPH_ERODE = 0, //腐蚀
MORPH_DILATE = 1, //膨胀
MORPH_OPEN = 2, //开操作
MORPH_CLOSE = 3, //闭操作
MORPH_GRADIENT = 4, //梯度操作
MORPH_TOPHAT = 5, //顶帽操作
MORPH_BLACKHAT = 6, //黑帽操作
};
最初の2つは、前に説明した膨張と腐食であり、残りは、今日説明した5つの形態学的操作です。
APIの場合、一般的に言えば、最初の4つのパラメーターを設定するだけでよく、後者のパラメーターはデフォルトで設定できます。
コード
#include<opencv2\opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
Mat src, dst;
src = imread("ur path of pic");
if (!src.data)
{
cout << "could not load image !";
return -1;
}
imshow("src", src);
Mat kernel = getStructuringElement(MORPH_RECT, Size(7, 7), Point(-1, -1));
//开操作
morphologyEx(src, dst, CV_MOP_OPEN, kernel);
imshow("open-src", dst);
//闭操作
morphologyEx(src, dst, CV_MOP_CLOSE, kernel);
imshow("close-src", dst);
//形态学梯度
morphologyEx(src, dst, CV_MOP_GRADIENT, kernel);
imshow("gradient-src", dst);
//顶帽
morphologyEx(src, dst, CV_MOP_TOPHAT, kernel);
imshow("tophat-src", dst);
//黑帽
morphologyEx(src, dst, CV_MOP_BLACKHAT, kernel);
imshow("blackhat-src", dst);
waitKey(0);
return 0;
}
効果
元の画像
開く操作
閉じる操作
形態勾配
トップハット
ブラックハット