图像分割-10.2.4边缘模型、边缘检测、
2016-06-24 19:56
246 查看
图像梯度及其性质:
该向量有一个重要的几何性质,它指出了f在位置(x,y)处的最大变化率的方向。
向量
的大小(长度)表示为M(x,y),即:
它是梯度向量方向变化率的值。其中
,M(x,y)都是和原图大小相同的图像,是x,y在f中的所有像素位置上变化时产生的。
M(x,y)称为梯度图像。梯度向量的方向由下列对于x轴度量的角度给出:
边缘模型:
台阶模型 斜坡模型
屋顶模型
,一阶导数的幅度可用于检测图像中的某个点处是否存在一个边缘。二阶导数的符号可用于确定一个便于像素位于该边缘的俺的一侧还是亮的一侧。
图像的每条边缘,二阶导数生成两个值(一条不希望的特点)。二阶导数的零交叉点(二阶导数级之间的连线与零灰度轴的交点称为该二阶导数的零交叉点),可用于定位粗边缘的中心。
梯度算子
一维模板
罗伯特交叉梯度算子
Roberts Prewitt
Sobel
,
,
,
沿对角线方向有最大响应:
Prewitt Sobel
二维梯度幅值和角度:
原图 x方向梯度
,y方向梯度
,梯度图像
+
代码:
角度图像不像幅度图像那么有用,当可作为用梯度幅值从图像中提取的信息的补充。图中恒定灰度区域,如斜屋顶的前变暖和前墙顶部的水平条带,
说明在这些区域中的所有像素位置处的梯度方向是相同的。
(不知道角度图像用哪个函数,暂时未实现)。
此外,梯度可以和阈值处理相结合,例如,将阈值设为梯度图像的最大值的33%的像素显示为白色,而低于该阈值的像素显示为黑色。
为防止噪声干扰,可在求梯度前,先对图像进行平滑处理。
参考文献:《数字图像处理》(第三版)冈萨雷斯
该向量有一个重要的几何性质,它指出了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%的像素显示为白色,而低于该阈值的像素显示为黑色。
为防止噪声干扰,可在求梯度前,先对图像进行平滑处理。
参考文献:《数字图像处理》(第三版)冈萨雷斯
相关文章推荐
- SQL语句中的 truncate 、delete与drop区别
- android无法生成R.java文件
- android打包之重叠包技术浅谈
- 查看局域网内其它电脑名称和IP
- PHP输出菱形(一)
- Git 的tag操作
- Kakfa揭秘 Day1 Kafka原理内幕
- SQL错误:无法绑定由多个部分组成的标识符“******”
- 命令模式
- 利用nginx+tomcat+memcached组建web服务器负载均衡
- Node.js中,使用cluster创建子进程
- 机器学习系列:(七)用PCA降维
- Android 国际化
- Android Studio你必须学会的快捷键(Eclipse转AS必看)
- PHP输出乘法口诀表
- 1. 设备号的申请
- git列出两个版本的差异
- 【leetcode】7. Reverse Integer
- iOS开发之iOS程序偏好设置(Settings Bundle)的使用
- 客户端开发知识体系