数学形态学图像处理——图像腐蚀,膨胀,开闭运算(《学习OpenCV》练习题第五章第四题)
2013-11-21 16:43
507 查看
a部分练习的是图像相减法,图像的减法又称减影技术,是指对同一景物在不同时间拍摄的图像或同一景物在不同波段的图像进行相减。
其主要作用如下:
1、去除不需要的叠加性图案;
2、运动检测;
3、梯度图像。
这是两张在不同时刻拍摄的图像,为了充分展示出效果,我将图像中的物体移动了一下:
图 一
图 二
这两幅图像相减,并取绝对值之后的结果图像:
图 三
可以看出,图像相减可以去除两张图像中相同的部分,找出两幅图像中不同的部分。
b部分对图三(即图像相减的结果图像)先进行腐蚀(Erosion)操作,再进行膨胀(Dilation)操作,实际上就是一个形态学开运算(Opening)。
图三执行形态学开运算后的结果图像:
图 四
其结果和图三比较,可以看出开运算的结果是去除了小的明亮区域,并且剩余的明亮区域被隔绝,但其大小不变。
c部分对图三(即图像相减的结果图像)先进行膨胀操作,再进行腐蚀操作,实际上就是一个形态学闭运算(Closing)。
图三执行形态学开运算后的结果图像:
图 五
其结果和图三比较,可以看出闭运算的结果是填充了明亮的对象内细小的黑暗空洞,连接了邻近对象,但其基本的大小不变。
总而言之,开运算常用于去除小的亮点,闭运算去除小的暗点。
最后,贴上代码:
其主要作用如下:
1、去除不需要的叠加性图案;
2、运动检测;
3、梯度图像。
这是两张在不同时刻拍摄的图像,为了充分展示出效果,我将图像中的物体移动了一下:
图 一
图 二
这两幅图像相减,并取绝对值之后的结果图像:
图 三
可以看出,图像相减可以去除两张图像中相同的部分,找出两幅图像中不同的部分。
b部分对图三(即图像相减的结果图像)先进行腐蚀(Erosion)操作,再进行膨胀(Dilation)操作,实际上就是一个形态学开运算(Opening)。
图三执行形态学开运算后的结果图像:
图 四
其结果和图三比较,可以看出开运算的结果是去除了小的明亮区域,并且剩余的明亮区域被隔绝,但其大小不变。
c部分对图三(即图像相减的结果图像)先进行膨胀操作,再进行腐蚀操作,实际上就是一个形态学闭运算(Closing)。
图三执行形态学开运算后的结果图像:
图 五
其结果和图三比较,可以看出闭运算的结果是填充了明亮的对象内细小的黑暗空洞,连接了邻近对象,但其基本的大小不变。
总而言之,开运算常用于去除小的亮点,闭运算去除小的暗点。
最后,贴上代码:
#include <stdio.h> #include <opencv\cv.h> #include <opencv\highgui.h> #include <opencv_libs247d.h> int main() { IplImage * src1 = cvLoadImage("frame_28.bmp", CV_LOAD_IMAGE_GRAYSCALE); IplImage * src2 = cvLoadImage("frame_52.bmp", CV_LOAD_IMAGE_GRAYSCALE); IplImage * diff12 = cvCreateImage(cvGetSize(src1), src1->depth, src1->nChannels); IplImage * cleandiff = cvCreateImage(cvGetSize(src1), src1->depth, src1->nChannels); IplImage * dirtydiff = cvCreateImage(cvGetSize(src1), src1->depth, src1->nChannels); cvAbsDiff(src1, src2, diff12); // Opening cvErode(diff12, cleandiff, NULL, 1); cvDilate(cleandiff, cleandiff, NULL, 1); // Closing cvDilate(diff12, dirtydiff); cvErode(dirtydiff, dirtydiff); cvShowImage("abs diff", diff12); cvShowImage("clean diff", cleandiff); cvShowImage("dirty diff", dirtydiff); cvSaveImage("absdiff.png", diff12); cvSaveImage("cleandiff.png", cleandiff); cvSaveImage("dirtydiff.png", dirtydiff); cvSaveImage("src1.png", src1); cvSaveImage("src2.png", src2); cvWaitKey(0); cvReleaseImage(&src1); cvReleaseImage(&src2); cvReleaseImage(&diff12); cvReleaseImage(&cleandiff); cvReleaseImage(&dirtydiff); cvDestroyAllWindows(); return 0; }
相关文章推荐
- 数学形态学图像处理——图像腐蚀,膨胀,开闭运算(《学习OpenCV》练习题第五章第四题)
- 图像处理算法系列 第六章 图像形态变化 膨胀 腐蚀 开运算 闭运算
- Matlab 图像处理 形态学 腐蚀 膨胀 开闭运算 连通分量
- 【图像处理】腐蚀膨胀与开运行、闭运算
- python 简单图像处理(13) 二值图腐蚀和膨胀,开运算、闭运算
- 【数字图像处理】图像二值化,腐蚀膨胀,开闭运算,击中击不中变换
- Matlab 图像处理 形态学 腐蚀 膨胀 开闭运算 连通分量
- opencv 图像处理 形态学操作 腐蚀 膨胀 开闭运算 阈值二值化 图像卷积 图像金字塔 Sobel算子 Laplacian 算子 candy边缘检测 霍夫变换 直方图
- Matlab 图像处理 形态学 腐蚀 膨胀 开闭运算 连通分量
- 图像处理——灰度化、二值化、膨胀算法、腐蚀算法以及开运算和闭运算
- 图像处理——灰度化、二值化、膨胀算法、腐蚀算法以及开运算和闭运算
- 图像处理——腐蚀、膨胀、开/闭运算、顶/黑帽
- 灰度图像--形态学处理(腐蚀,膨胀,开、闭运算,顶帽(礼帽),低帽(黒帽),测定腐蚀、测地膨胀,形态学重建)
- Matlab 图像处理 形态学 腐蚀 膨胀 开闭运算 连通分量
- Matlab 图像处理 形态学 腐蚀 膨胀 开闭运算 连通分量
- 图像处理 形态学 (腐蚀 膨胀 开闭运算 连通分量....)
- Matlab 图像处理 形态学 腐蚀 膨胀 开闭运算 连通分量
- python 简单图像处理(14) 灰度图腐蚀和膨胀,开运算、闭运算
- python 简单图像处理(13) 二值图腐蚀和膨胀,开运算、闭运算
- 图像处理__腐蚀和膨胀_开运算_闭运算