(19)Laplace算子

/*
 * Laplace算子
    求导,通过二阶导数获得图像边缘,这也是一个卷积理论的延伸,可以通过卷积求取图像的边缘,Laplace算子也是一个卷积核
    理论:
        前一节我们学习了 Sobel 算子 ,其基础来自于一个事实,即在边缘部分,像素值出现”跳跃“或者较大的变化。
        如果在此边缘部分求取一阶导数,你会看到极值的出现。
        你会发现在一阶导数的极值位置,二阶导数为0。所以我们也可以用这个特点来作为检测图像边缘的方法。
        但是, 二阶导数的0值不仅仅出现在边缘(它们也可能出现在无意义的位置),但是我们可以过滤掉这些点。

        有lanplace算子来解决二阶导数,直接用,opencv提供了相关的API-cv::Laplace
    处理流程:
        1.使用高斯平滑消除噪声,
        2.将图像转换到灰度空间。(在彩色图像上直接提取边缘就是大错特错了)
        3.使用Laplacian算子作用于灰度图像,并保存输出图像。
        4.取绝对值convertScaleAbs()
                laplace之后图像可能有正值有负值,无论是正的还是负的都代表图像它之间的差异,
               这些值都是特征,我们一定要留住,负的要是舍掉就出大问题了,深度也变成8位的了即深度转化为 CV_8U
        5.输出结果
*/

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main()
{
    Mat src, res;
    src = imread("D:/A_Graduation/Pictures/Segmentatio/1.jpg");
    imshow("src", src);

    //高斯模糊
    //不是真的要把它模糊掉,而是稍微模糊一点点把那些小的噪点给去掉,所以3*3的就行了
    Mat gray_res, edge_image;
    GaussianBlur(src, res, Size(3, 3), 0, 0);

    cvtColor(res, gray_res, CV_BGR2GRAY);

    //laplace
    Laplacian(gray_res, edge_image, CV_16S, 3); //第三个参数为位图的深度

    //取它的绝对值
    convertScaleAbs(edge_image, edge_image); //变成8位的

    //laplace找出来的边缘它的噪声还是比较明显的,我们对这个边缘可以进一步做一个处理
    threshold(edge_image, edge_image, 0, 255, THRESH_OTSU | THRESH_BINARY);

    //显示
    imshow("edge_image", edge_image);

    waitKey(0);
    return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值