图像分割-10.2.4边缘模型、边缘检测、

图像梯度及其性质:


该向量有一个重要的几何性质,它指出了f在位置(x,y)处的最大变化率的方向。


向量的大小(长度)表示为M(x,y),即:


它是梯度向量方向变化率的值。其中,M(x,y)都是和原图大小相同的图像,是x,y在f中的所有像素位置上变化时产生的。

M(x,y)称为梯度图像。梯度向量的方向由下列对于x轴度量的角度给出:



边缘模型:

台阶模型 斜坡模型 屋顶模型


,一阶导数的幅度可用于检测图像中的某个点处是否存在一个边缘。二阶导数的符号可用于确定一个便于像素位于该边缘的俺的一侧还是亮的一侧。

图像的每条边缘,二阶导数生成两个值(一条不希望的特点)。二阶导数的零交叉点(二阶导数级之间的连线与零灰度轴的交点称为该二阶导数的零交叉点),可用于定位粗边缘的中心。

梯度算子



一维模板



罗伯特交叉梯度算子 

Roberts Prewitt Sobel

,,,


沿对角线方向有最大响应:

Prewitt Sobel



二维梯度幅值和角度:

原图 x方向梯度,y方向梯度,梯度图像+

代码:

#include<iostream>
#include"opencv.hpp"

using namespace cv;
using namespace std;
#define N 3

#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 kernel_size = 3;
int scale = 1;
int delta = 0;
int ddepth = CV_16S;

int main(){
	Mat src = imread("Fig1016(a)(building_original).tif", 0); 
	if (!src.data){
		cout << "error src image" << endl;
	}
	if (src.channels() != 1){
		cvtColor(src, src, CV_BGR2HLS);
	}
	resize(src, src, Size(500, 500), 0.5, 0.5);
	imwrite("o.jpg", src);
	Mat dst=Mat::zeros(src.rows,src.cols,CV_8UC1);
	
	Mat grad_x, abs_grad_x, src_gray, grad_y, abs_grad_y, grad;

	Sobel(src, grad_x, src.type(), 1, 0, 3, 1, 0, BORDER_DEFAULT);
	convertScaleAbs(grad_x, abs_grad_x);
	imshow("abs_grad_x", abs_grad_x);

	
	Sobel(src, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_DEFAULT);
	//  Scharr( src_gray, grad_y, ddepth, 0, 1, scale, delta, BORDER_DEFAULT );  
	convertScaleAbs(grad_y, abs_grad_y);
	imshow("abs_grad_y", abs_grad_y);
	/// 合并梯度(近似)  
	addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad);
	imshow("abs_grad", grad);
	
	waitKey();

	imwrite("x.bmp", abs_grad_x);
	imwrite("y.bmp", abs_grad_y);
	imwrite("g.bmp", grad);
	return 0;
}




角度图像不像幅度图像那么有用,当可作为用梯度幅值从图像中提取的信息的补充。图中恒定灰度区域,如斜屋顶的前变暖和前墙顶部的水平条带,

说明在这些区域中的所有像素位置处的梯度方向是相同的。

(不知道角度图像用哪个函数,暂时未实现)。

此外,梯度可以和阈值处理相结合,例如,将阈值设为梯度图像的最大值的33%的像素显示为白色,而低于该阈值的像素显示为黑色。

为防止噪声干扰,可在求梯度前,先对图像进行平滑处理。


参考文献:《数字图像处理》(第三版)冈萨雷斯


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值