高斯拉普拉斯边缘检测算子(LOG)
来源:互联网 发布:mac itunes 制作铃声 编辑:程序博客网 时间:2024/04/28 17:33
图像边缘可表示为一阶过极点或二阶过零点.
拉普拉斯算子表示为d2f = a2f / a2x + a2f / a2y
由于噪声点对边缘检测影响较大,所以由高斯滤波和拉普拉斯算子结合,形成高斯拉普拉斯算子。
由高斯函数根据拉普拉斯算子的公式求导可得
离散化,取sigma为1.0,则5x5模块为
{0.0175 0.0392 0.0431 0.0392 0.0175
0.0392 0 -0.0965 0 0.0392
0.0431 -0.0965 -0.3183 -0.0965 0.0431
0.0392 0 -0.0965 0 0.0392
0.0175 0.0392 0.0431 0.0392 0.0175}
对其取整,并使总和为0,则
{ -2, -4, -4, -4, -2,
-4, 0, 8, 0, -4,
-4, 8, 24, 8, -4,
-4, 0, 8, 0, -4,
-2, -4, -4, -4, -2 };
#include"cv.h"#include "highgui.h"void LOG(CvMat* gray, CvMat* edge);int main(){ IplImage *src = cvLoadImage("flower.jpg",1); const int width = src->width; const int height = src->height; CvMat *gray = cvCreateMat(height, width, CV_8UC1); cvCvtColor(src, gray, CV_BGR2GRAY); CvMat *edge = cvCreateMat(height, width, CV_8UC1); LOG(gray, edge); cvShowImage("SRC", src); cvShowImage("GRAY", gray); cvShowImage("LOG", edge); cvWaitKey(0); cvCvtColor(gray, src, CV_GRAY2BGR); cvSaveImage("GRAY.bmp", src); cvCvtColor(edge, src, CV_GRAY2BGR); cvSaveImage("EDGE.bmp", src); cvReleaseMat(&gray); cvReleaseMat(&edge); return 0;}void LOG(CvMat* gray, CvMat* edge){ const int width = gray->width; const int height = gray->height; cvZero(edge); CvMat* edgeTemp1 = cvCreateMat(height, width, CV_16SC1); cvZero(edgeTemp1); int Template1[25] = { -2, -4, -4, -4, -2, -4, 0, 8, 0, -4, -4, 8, 24, 8, -4, -4, 0, 8, 0, -4, -2, -4, -4, -4, -2 }; for (int j = 2; j < height - 2; j ++) { int* edgeTemp1Data = (int*)(edgeTemp1->data.ptr + j * edgeTemp1->step); uchar* edgeData = (uchar*)(edge->data.ptr + j * edge->step); for (int i = 2; i < width - 2; i ++) { for (int k = 0; k < 5; k ++) { for (int l = 0; l < 5; l ++) { edgeTemp1Data[i] += Template1[5 * k + l] * ((uchar*)(gray->data.ptr + (j + k - 2) * gray->step))[i + l - 2]; if (abs(edgeTemp1Data[i]) > 255) { edgeData[i] = 255; } else { edgeData[i] = abs(edgeTemp1Data[i]); } } } } } cvReleaseMat(&edgeTemp1);}
源图,灰度图和效果图如下所示:
0 0
- 高斯拉普拉斯边缘检测算子(LOG)
- LoG(高斯拉普拉斯算子)源代码
- LOG高斯-拉普拉斯算子
- 边缘检测(Sobel算子,拉普拉斯算子,Canny算子)
- 边缘检测:Sobel、拉普拉斯算子
- 高斯拉普拉斯锐化(边缘检测)vc实现
- 高斯拉普拉斯锐化(边缘检测)vc实现
- 【OpenCV】边缘检测:Sobel、拉普拉斯算子
- 【OpenCV】边缘检测:Sobel、拉普拉斯算子
- 【OpenCV】边缘检测:Sobel、拉普拉斯算子
- 边缘t检测之拉普拉斯算子
- 【OpenCV】边缘检测:Sobel、拉普拉斯算子
- OpenCV 边缘检测:Sobel、拉普拉斯算子
- 【OpenCV】边缘检测:Sobel、拉普拉斯算子
- 【OpenCV】边缘检测:Sobel、拉普拉斯算子
- 高斯拉普拉斯算子
- 边缘检测之LOG算子
- 边缘检测(6)Log(Laplacianof Gassian )算子
- php链接mysql进行增删改查
- 广东省第一届“强网杯”决赛 心得
- HDOJ--1002
- LeetCode 83:Remove Duplicates from Sorted List
- 输入输出流cout:写到标准输出的ostream对象; cerr:输出到标准错误的ostream对象,常用于程序错误信息; clog:也是输出标准错误流(这点儿和cerr是一样的),貌似平时很少用到这
- 高斯拉普拉斯边缘检测算子(LOG)
- PHP里面汉字简繁与拼音转换
- Ubuntu 安装wps-office
- 文件写入HDFS的整个流程
- 欧几里得算法的证明
- Android中Paint画笔类的使用详解
- 经验之谈—坐标系的转换
- 数据结构之哈夫曼树
- VS2010 MFC 组件 增加Framework 2.0 3.0