基於OpenCvSharp的數字圖像處理 - 形態學

一、腐蝕

形態學的內部算法依然是卷積,跟中值濾波一樣,非線性。中值濾波取核範圍的中位數,而腐蝕取最小值,膨脹取最大值。

腐蝕看起來的效果是亮的區域被侵蝕,可用於一些噪聲的去除。

Mat src = new Mat(img_region, ImreadModes.Grayscale);
Mat result = new Mat();
Mat element = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(5, 5));
Cv2.Erode(src, result, element);
result.SaveImage(img_result);

效果如下:

二、膨脹

膨脹的效果跟腐蝕相反,亮區會向外延伸,可用於填補孔洞。

Mat src = new Mat(img_region, ImreadModes.Grayscale);
Mat result = new Mat();
Mat element = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(5, 5));
Cv2.Dilate(src, result, element);
result.SaveImage(img_result);

效果如下:

三、開運算

開運算是先腐蝕,再膨脹,可用於分隔區域,用來計數。

Mat src = new Mat(img_region, ImreadModes.Grayscale);
Mat result = new Mat();
Mat element = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(5, 5));
Cv2.MorphologyEx(src, result, MorphTypes.Open, element);
result.SaveImage(img_result);

效果如下:

四、閉運算

閉運算是先膨脹,再腐蝕,可用於在檢測連通區域時減少噪聲。

Mat src = new Mat(img_region, ImreadModes.Grayscale);
Mat result = new Mat();
Mat element = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(5, 5));
Cv2.MorphologyEx(src, result, MorphTypes.Close, element);
result.SaveImage(img_result);

效果如下:

五、形態梯度

形態梯度是用膨脹結果減腐蝕結果,能夠找出目標的骨架。

Mat src = new Mat(img_region, ImreadModes.Grayscale);
Mat result = new Mat();
Mat element = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(5, 5));
Cv2.MorphologyEx(src, result, MorphTypes.Gradient, element);
result.SaveImage(img_result);

效果如下:

六、頂帽

頂帽是用源圖減去開運算的結果,突出了圖像中亮的部分。

Mat src = new Mat(img_cell, ImreadModes.Grayscale);
Mat result = new Mat();
Mat element = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(9, 9));
Cv2.MorphologyEx(src, result, MorphTypes.TopHat, element);
result.SaveImage(img_result);

效果如下:

七、黑帽

黑帽是用閉運算的結果減去原圖,突出了圖像中暗的部分。

Mat src = new Mat(img_cell, ImreadModes.Grayscale);
Mat result = new Mat();
Mat element = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(9, 9));
Cv2.MorphologyEx(src, result, MorphTypes.BlackHat, element);
result.SaveImage(img_result);

效果如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章