图像处理之--图像分割10.1基础知识
2016-06-24 13:34
489 查看
1.单色图像的分割算法,基于处理灰度值的两类特性:不连续性和相似性。
基于第一类特性,假设这些区域的边界彼此完全不同,且与背景不同,从而允许基于灰度的局部不连续性来进行边界检测。
第二类基于区域的分割方法是根据事先定义的一组准则把一幅图像分割成相似的几个区域。
2.例子:
一幅在恒定灰度的暗背景上叠加一个恒定灰度区域的图像,基于灰度的局部不连续性来进行边界检测。
其中threshold参数:
得到分割的结果如下:
基于区域,区分纹理区域和恒定区域的一个属性。像素值的标准差是完成该任务的一种度量,因为在纹理区域标准差非零,而在其他区域标准差为零。
下图显示了将原图分成大小为4*4的一系列子区域后的结果,若某个子区域像素的标准差为正,将该子区域标记为白色,其他为零。
基于第一类特性,假设这些区域的边界彼此完全不同,且与背景不同,从而允许基于灰度的局部不连续性来进行边界检测。
第二类基于区域的分割方法是根据事先定义的一组准则把一幅图像分割成相似的几个区域。
2.例子:
一幅在恒定灰度的暗背景上叠加一个恒定灰度区域的图像,基于灰度的局部不连续性来进行边界检测。
#include"opencv.hpp" using namespace cv; #ifdef _DEBUG #pragma comment(lib,"opencv_core2413d.lib") #pragma comment(lib,"opencv_imgproc2413d.lib") #pragma comment(lib,"opencv_highgui2413d.lib") #pragma comment(lib,"opencv_features2d2413d.lib") #pragma comment(lib,"opencv_calib3d2413.lib") #else #pragma comment(lib,"opencv_core2413.lib") #pragma comment(lib,"opencv_imgproc2413.lib") #pragma comment(lib,"opencv_highgui2413.lib") #pragma comment(lib,"opencv_features2d2413.lib") #pragma comment(lib,"opencv_calib3d2413.lib") #endif int main(){ //Mat src = imread("Fig1001(a)(constant_gray_region).tif", 0); Mat src = imread("Fig1001(d)(noisy_region).tif", 0); Mat dst,dev,mask; if (src.channels() != 1){ cvtColor(src, src,CV_BGR2HLS); } threshold(src, dst, 200, 255, THRESH_BINARY); imshow("dst", dst); waitKey(); return 0; }
Mat src = imread("Fig1001(a)(constant_gray_region).tif", 0); Mat dst; threshold(src, dst, 200, 255, THRESH_BINARY);
其中threshold参数:
得到分割的结果如下:
基于区域,区分纹理区域和恒定区域的一个属性。像素值的标准差是完成该任务的一种度量,因为在纹理区域标准差非零,而在其他区域标准差为零。
下图显示了将原图分成大小为4*4的一系列子区域后的结果,若某个子区域像素的标准差为正,将该子区域标记为白色,其他为零。
#include"opencv.hpp" using namespace cv; #define N 4 #ifdef _DEBUG #pragma comment(lib,"opencv_core2413d.lib") #pragma comment(lib,"opencv_imgproc2413d.lib") #pragma comment(lib,"opencv_highgui2413d.lib") #pragma comment(lib,"opencv_features2d2413d.lib") #pragma comment(lib,"opencv_calib3d2413.lib") #else #pragma comment(lib,"opencv_core2413.lib") #pragma comment(lib,"opencv_imgproc2413.lib") #pragma comment(lib,"opencv_highgui2413.lib") #pragma comment(lib,"opencv_features2d2413.lib") #pragma comment(lib,"opencv_calib3d2413.lib") #endif int main(){ //Mat src = imread("Fig1001(a)(constant_gray_region).tif", 0); Mat src = imread("Fig1001(d)(noisy_region).tif", 0); Mat dst,dev,mask; if (src.channels() != 1){ cvtColor(src, src,CV_BGR2HLS); } float sum = 0,mean=0; for (int i = 0; i < src.rows-N; i+=N){ for (int j = 0; j < src.cols-N; j+=N){ sum = 0; for (int m = 0; m < N; m++){ for (int n = 0; n < N; n++){ sum += src.at<uchar>(i + m, j + n); } } mean = sum / 16; sum = 0; for (int m = 0; m < N; m++){ for (int n = 0; n < N; n++){ sum += (src.at<uchar>(i + m, j + n) - mean)*(src.at<uchar>(i + m, j + n) - mean); } } if (sqrt(sum)>10){ for (int m = 0; m < N; m++){ for (int n = 0; n < N; n++){ src.at<uchar>(i + m, j + n) =255; } } } else{ for (int m = 0; m < N; m++){ for (int n = 0; n < N; n++){ src.at<uchar>(i + m, j + n) = 0; } } } } } //meanStdDev(src, dst, dev, mask); //threshold(src, dst, 200, 255, THRESH_BINARY); imshow("dst", src); waitKey(); return 0; }
相关文章推荐
- 欢迎使用CSDN-markdown编辑器
- 内存泄漏注意点
- 《Java性能权威指南》学习笔记
- 内存优化之lruchche的用法(转载的)
- Java核心技术之代理
- python操作mongodb之五大量写操作
- 讨论
- 【C/C++】深入预处理之line
- 【DSP开发】mailbox的使用
- springmvc注解开发-springmvc参数绑定-集合
- centos7开放端口
- 【那些年遇到过的面试题】 explicit关键字
- MFC获得本地计算机协议信息代码
- 实用js+css滑动门导航菜单
- SQL语言的分类
- 读书时间《JavaScript高级程序设计》七:表单
- 第16周项目-小玩文件(字典)
- 开始的开始
- MFC系统服务开启停止代码
- [leetcode] 359. Logger Rate Limiter 解题报告