這裏我們主要想講解岡薩雷斯的數字圖像處理這本書上膨脹腐蝕的定義及用opencv實現的結果,然後對比它們之間的差異。
一:opencv實現
在這之前可以看我的另外一篇blog:http://blog.csdn.net/lu597203933/article/details/17184439
膨脹:
案例代碼:
-
int main()
-
{
-
int a[8][8] = {
-
{0,0,0,0,0,0,0,0},
-
{0,0,5,1,0,0,1,1},
-
{0,1,0,1,0,1,0,0},
-
{0,1,1,2,1,0,1,0},
-
{0,0,0,1,0,1,0,0},
-
{0,1,0,0,0,0,0,1},
-
{0,0,0,0,0,0,0,0},
-
{0,0,0,0,0,0,0,0}
-
};
-
Mat S = Mat::zeros(8, 8, CV_8UC1);
-
for(int j = 0; j < S.rows; j++)
-
{
-
for(int i = 0; i < S.cols; i++)
-
{
-
S.at<uchar>(j,i) = a[j][i];
-
}
-
}
-
cout << "S = " << endl << " " << S << endl;
-
Mat result;
-
Mat dilated = Mat::zeros(3, 3, CV_8UC1);
-
dilated.at<uchar>(0,1) = 1;
-
-
dilated.at<uchar>(1,0) = 1;
-
dilated.at<uchar>(1,1) = 2;
-
dilated.at<uchar>(1,2) = 1;
-
dilated.at<uchar>(2,1) = 1;
-
cout << "dilated = " << endl << " " << dilated << endl;
-
dilate(S, result, dilated);
-
cout << "result = " << endl << " " << result << endl;
-
return 0;
-
}
結果:
膨脹就是如果結構元B有一處非0,而A對應位置非0,則求出A中與B中對應非0處所有像素最大值來代替當前像素點值。Opencv中默認的結構元是3*3的矩陣,全部非0。
腐蝕:
案例代碼:
-
int main()
-
{
-
int a[8][8] = {
-
{0,0,0,0,0,0,0,0},
-
{0,0,5,1,0,0,1,1},
-
{0,1,0,1,0,1,0,0},
-
{0,1,1,2,1,0,1,0},
-
{0,0,0,1,0,1,0,0},
-
{0,1,0,0,0,0,0,1},
-
{0,0,0,0,0,0,0,0},
-
{0,0,0,0,0,0,0,0}
-
};
-
Mat S = Mat::zeros(8, 8, CV_8UC1);
-
for(int j = 0; j < S.rows; j++)
-
{
-
for(int i = 0; i < S.cols; i++)
-
{
-
S.at<uchar>(j,i) = a[j][i];
-
}
-
}
-
cout << "S = " << endl << " " << S << endl;
-
Mat result;
-
Mat eroded = Mat::zeros(3, 3, CV_8UC1);
-
eroded.at<uchar>(0,1) = 1;
-
-
eroded.at<uchar>(1,0) = 1;
-
eroded.at<uchar>(1,1) = 2;
-
eroded.at<uchar>(1,2) = 1;
-
eroded.at<uchar>(2,1) = 1;
-
cout << "eroded = " << endl << " " << eroded << endl;
-
erode(S, result, eroded);
-
cout << "result = " << endl << " " << result << endl;
-
return 0;
結果:
腐蝕就是結構元B處非0,則A對應位置也全非0,且取全非0處最小值來代替當前像素點的值。
二:書中定義
膨脹: . 這裏的B是結構元,B~是結構元的反射,反射不明白可以看書,就是旋轉或者按中心點對稱。如:
0 1 的反射就是 1 1
1 1 1 0
與opencv中唯一的區別就是必須得求反射,而opencv中則直接用給定的結構元B。
腐蝕:
案例:
作者:小村長 出處:http://blog.csdn.net/lu597203933 歡迎轉載或分享,但請務必聲明文章出處。
(新浪微博:http://weibo.com/2653613245/profile , 歡迎交流!)