图像处理之--图像分割10.1基础知识

1.单色图像的分割算法,基于处理灰度值的两类特性:不连续性和相似性。

基于第一类特性,假设这些区域的边界彼此完全不同,且与背景不同,从而允许基于灰度的局部不连续性来进行边界检测。

第二类基于区域的分割方法是根据事先定义的一组准则把一幅图像分割成相似的几个区域。

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;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值