OpenCV3エントリ(7)画像の形態

1、拡張

膨張処理は、画素膨張の全体的な値を作成、画像の画素値のエッジに加え、実際には、画像、いわゆる、したがって、画像の拡大効果を達成します。

Zの2セットAの構造要素およびエッチング使用してAの要素S、S上の、と呼ばれます。

A⊕S= {Z |(S)Z∩A≠Ø}

ドット点ZにSが移動し、SとAとの共通の交点(非空集合)を有する場合にSドット画像の構成要素は、Z平面内で移動させましょう、これはドットの集合体であると考えられるZであります画像のスウェルS。

プロトタイプ:

CV_EXPORTS_W 無効DILATE(InputArray SRC、OutputArray DST、InputArrayカーネル、
                          ポイントアンカー =ポイント( - 1、 - 1)、int型の反復= 1 INT borderType = BORDER_CONSTANT、
                           constのスカラー&borderValue = morphologyDefaultBorderValue());

DSTは、処理結果を表します

SRCは、原画像を表します

これは、畳み込みカーネルを表し、

アンカーは、アンカーの位置を表すポイントタイプ、デフォルトの中心であります

反復は反復回数を表し、

ファジィ双方向borderTypeエッジ

一般正面に3つのパラメータを必要とする、第三のパラメータは、コアテンプレートおよびアンカープロパティの位置を決定getStructuringElement関数によって決定されます。

CV_EXPORTS_WマットgetStructuringElement(int型の形状、サイズksize、ポイントアンカーポイント=(-1、-1))。

タイプのテンプレートカーネルは以下のとおりです。

MORPH_RECT:長方形

MORPH_CROSS:クロスオーバー

MORPH_ELLIPSE:楕円

例としては、次のとおりです。

IMG =関数imread(" D:\\ 5.OpenCV \\ LeanOpenCV \\ pic_src \\ pic7.bmp \\ WORK " )。

IMG1 = img.clone()。
関数imshow(" 原图" 、IMG); 
マット要素 = getStructuringElement(MORPH_RECT、サイズ(55 ))。
DILATE(IMG、IMG2、要素)
関数imshow(" 膨胀"、IMG2)。

2、腐食

腐食:シークは極小値です。

特定の論理演算用ブラシ画像と呼ばれる構成要素(Sturcture要素)、および領域内の各画素位置に対応する2値画像。出力画像の画素に対応する計算構成。効果の大きさを計算する要素の内容の構造、および論理演算の性質に依存します。

Zの2セットAの構造要素およびエッチング使用してAの要素S、S上の、と呼ばれます。

AΘS= {Z |(S)Z€A}

LET Z平面における画像ドット移動のS構造要素点Sが点Zに移動された場合、完全にS Aに含有させることができるが、このような点zの集まりと考えられるS Aであります腐食画像。

プロトタイプ:

CV_EXPORTS_Wのボイドは侵食さ(InputArray SRC、OutputArray DST、InputArrayカーネル、
                         ポイントアンカー =ポイント( - 1、 - 1)、int型の反復= 1 INT borderType = BORDER_CONSTANT、
                          constのスカラー&borderValue = morphologyDefaultBorderValue());

例としては、次のとおりです。

IMG =関数imread(" D:\\ 5.OpenCV \\ LeanOpenCV \\ pic_src \\ pic7.bmp \\ WORK " )。

IMG1 = img.clone()。
関数imshow(" 原图" 、IMG); 
マット要素 = getStructuringElement(MORPH_RECT、サイズ(55 ))。
(IMG、IMG2、要素)侵食。
関数imshow(" 腐蚀"、IMG2)。

図3に示すように、開動作及び閉動作

1)エッチングプロセスの最初の開動作後に展開され、それは次のように表すことができます。

DST =オープン(SRC、要素)

DST = DILATE(侵食(DST、エレメント))

処置:小さなオブジェクト、境界の滑らかな形状を排除するために、そして面積は変更されません。小さな粒状ノイズは、オブジェクトの間の接着を切断、除去することができます。

開閉動作が腐食プロセスに拡張された後2)のように表すことができます。

DST =クローズ(SRC、要素)

DST =侵食(DILATE(DST、エレメント))

処置:滑らかな境界領域が変更されていない間体内の小さな穴を埋めるように、隣接する接続オブジェクト、輪郭線が切断されます。

プロトタイプ:

CV_EXPORTS_W 無効morphologyEx(InputArray SRC、OutputArray DST、
                                 int型オペアンプ、InputArrayカーネル、
                                ポイントアンカー =ポイント( - 1、 - 1)、int型の反復= 1 INT borderType = BORDER_CONSTANT、
                                 constのスカラー&borderValue = morphologyDefaultBorderValue());

前記OPモルフォロジー演算の第3のパラメータの代表的なタイプは、次の表です。

img = imread("D:\\WORK\\5.OpenCV\\LeanOpenCV\\pic_src\\pic7.bmp");

img1 = img.clone();
imshow("原图", img);
Mat element = getStructuringElement(MORPH_RECT, Size(7, 7));
morphologyEx(img, img2, MORPH_OPEN, element);
imshow("开运算", img2);
morphologyEx(img, img3, MORPH_CLOSE, element);
imshow("闭运算", img3);

内核模板大小为Size(3,3)时测试如下图,开运算因为先做了腐蚀所以图片上的小白点都消失了。而闭运算因为先膨胀,所以小白点被放大了,再次腐蚀后也留了下来,并且有多个小白点连在了一起。此外闭运算图中细菌出现了互相连接的边缘,开运算细菌边缘间隔更加清晰。

内核模板大小为Size(7,7)时测试如下。

4、形态学梯度

形态学梯度就是膨胀图与腐蚀图之差,梯度从原区域的膨胀中减去了原区域的收缩,保留了图像的外边缘部分,也就是图像的轮廓。

可以表示为:

dst = morpd_grad(src, element) = dilate (src, element) - erode(src, element)

5、顶帽和黑帽

1)顶帽(Top Hat):

又称“礼帽”运算,原图像与开运算图的差,突出原图像中比周围亮的区域。

因为开运算放大了裂缝或者局部低亮度的区域,再从原图中减去开运算后的图,就保留了比原图轮廓周围的区域更明亮的区域。顶帽运算往往用来分离比邻近点亮一些的斑块。当一幅图像具有大幅的背景的时候,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。

2)黑帽(Black Hat):

闭操作图像减去原图像,突出原图像中比周围暗的区域。

黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域,此外黑帽还能得到图像内部的小孔,或者前景色中的小黑点。

6、高斯金字塔

图像金字塔是图像中多尺度表达的一种,最初用于机器视觉和图像压缩,金字塔的底部是高分辨率的图像,而顶部是低分辨率的近似,当向金字塔的上层移动时,尺寸和分辨率降低,伴随的细节就越少。低分辨率的图像主要用于分析大的结构或图像的整体内容,高分辨率图像适合分析单个物体的特性。

1)下采样:就是图片缩小,使用PryDown函数,先高斯模糊,再降采样。下采样将步骤:先对图像进行高斯内核卷积,再将所有偶数行和列去除,图像缩小到原来四分之一,迭代上述步骤就得到的金字塔。

2)上采样:就是图片放大,使用PryUp函数。先将图像在每个方向扩大为原来的两倍,新增的行和列以0填充,再卷积得到放大后的图像。

函数原型为:

CV_EXPORTS_W void pyrUp( InputArray src, OutputArray dst,
                         const Size& dstsize = Size(), int borderType = BORDER_DEFAULT );
CV_EXPORTS_W void pyrDown( InputArray src, OutputArray dst,
                          const Size& dstsize = Size(), int borderType = BORDER_DEFAULT );

示例如下。

img = imread("D:\\WORK\\5.OpenCV\\LeanOpenCV\\pic_src\\pic5.bmp");
imshow("原图", img);
pyrDown(img, img2, Size(img.cols * 2, img.rows * 2));
imshow("上采样运算1", img2);
pyrDown(img2, img3, Size(img2.cols * 2, img2.rows * 2));
imshow("上采样运算2", img3);

上采样结果。

下采样结果。

7、参考文献

1、《OpenCV3 编程入门》,电子工业出版社,毛星雨著

2、《学习OpenCV》,清华大学出版社,Gary Bradski, Adrian kaehler著

3、图像金字塔(高斯金字塔、拉普拉斯金字塔)

https://www.cnblogs.com/sddai/p/10330756.html

4、图像金字塔

https://www.kancloud.cn/aollo/aolloopencv/272073

5、Image Pyramids

https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_pyramids/py_pyramids.html

6、Image Pyramids

https://docs.opencv.org/2.4/doc/tutorials/imgproc/pyramids/pyramids.html

 

 尊重原创技术文章,转载请注明。

https://www.cnblogs.com/pingwen/p/12319629.html

おすすめ

転載: www.cnblogs.com/pingwen/p/12319629.html