灰度图像--图像增强 拉普拉斯算子

学习DIP第34天

转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意。有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!!!!

文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro

开篇废话

今天的废话是,锐化和后面的分割有很大的关系,所以决定把图像增强总结完以后开始说分割,分割中有很多又去的课题,比如边缘提取,形状识别等,具有挑战性,图像增强除了平滑和锐化还有灰度变换,但在很早以前已经写过灰度变换的一些例子了,所以,后面只简要的写下原理,周一就可以开始研究分割了,每当结束一个大分支的时候总有一种踏上新的征途的感觉,但不得不承认,之前所学习的一切只是基础知识,如果想深入的话可能要花费很长时间,尤其是图像处理这么复杂的多学科领域,新技术日新月异,但只要打好基础,一定会在以后从事的领域中大展拳脚,希望与因为爱好而从事图像处理,计算机视觉的攻城狮们共同进步。

数学基础

拉普拉斯算子,二阶微分线性算子,为什么上来就学二阶微分算子,前文说过,与一阶微分相比,二阶微分的边缘定位能力更强,锐化效果更好,所以我们来先学习二阶微分算子,使用二阶微分算子的基本方法是定义一种二阶微分的离散形式,然后根据这个形式生成一个滤波模板,与图像卷积。

各向同性滤波器,图像旋转后响应不变,这就要求滤波模板自身是对称的,如果不对称,结果就是,当原图旋转90°时,原图某一点能检测出细节(突变)的,现在却检测不出来,这就是各向异性的原因。我们更关心的是各向同性滤波模板,对图像的旋转不敏感。

对于二维图像f(x,y),二阶微分最简单的定义--拉普拉斯算子定义为:

对于任意阶微分算子都是线性算子,所以二阶微分算子和后面的一阶微分算子都可以用生成模板然后卷积的方式得出结果。

根据前面对二阶微分的定义有:

根据上面的定义,与拉普拉斯算子的定义相结合,得到:

也就是一个点的拉普拉斯的算子计算结果是上下左右的灰度的和减去本身灰度的四倍。同样,可以根据二阶微分的不同定义,所有符号相反,也就是上式所有灰度值全加上负号,就是-1,-1,-1,-1,4。但要注意,符号改变,锐化的时候与原图的加或减应当相对变化。上面是四邻接的拉普拉斯算子,将这个算子旋转45°后与原算子相加,就变成八邻域的算子了,也就是一个像素周围一圈8个像素的和与中间像素8倍的差,作为拉普拉斯计算结果。

因为要强调图像中突变(细节),所以平滑灰度的区域,无响应,即模板系数的和为0,也是二阶微分必备条件。

最后的锐化公式:

g是输出,f为原始图像,c是系数,也就是要加上多少细节的多少,与上一篇的锐化过程是一致的,先提取细节,然后再加(或者减去负细节)到原图中。

得到滤波模板,此模板尺寸恒定,就是3x3,不像平滑模板,尺寸可变:

代码

void Laplace(double *src,double *dst,int width,int height,int mask_type){
    double LaplaceMask0[9]={0,1,0,1,-4,1,0,1,0};
    double LaplaceMask1[9]={1,1,1,1,-8,1,1,1,1};
    double LaplaceMask2[9]={0,-1,0,-1,4,-1,0,-1,0};
    double LaplaceMask3[9]={-1,-1,-1,-1,8,-1,-1,-1,-1};
    switch(mask_type){
        case SHARPEN_LAP_0:
            RealRelevant(src, dst, LaplaceMask0, width, height, LAPLACE_MASK_SIZE,LAPLACE_MASK_SIZE);
            break;
        case SHARPEN_LAP_1:
            RealRelevant(src, dst, LaplaceMask1, width, height, LAPLACE_MASK_SIZE,LAPLACE_MASK_SIZE);
            break;
        case SHARPEN_LAP_2:
            RealRelevant(src, dst, LaplaceMask2, width, height, LAPLACE_MASK_SIZE,LAPLACE_MASK_SIZE);
            break;
        case SHARPEN_LAP_3:
            RealRelevant(src, dst, LaplaceMask3, width, height, LAPLACE_MASK_SIZE,LAPLACE_MASK_SIZE);
            break;
        default:
            printf("wrong mask type\n");
            matrixCopy(src, dst, width, height);
            break;
    }

}
void LaplaceSharpen(double *src,double *dst,int width,int height,int mask_type,double c){

    Laplace(src,dst,width,height,mask_type);
    matrixMultreal(dst,dst,c,width,height);

    switch(mask_type){
        case SHARPEN_LAP_0:
        case SHARPEN_LAP_1:
            matrixSub(src,dst,dst,width,height);
            break;
        case SHARPEN_LAP_2:
        case SHARPEN_LAP_3:
            matrixAdd(src,dst,dst,width,height);
            break;
        default:
            printf("wrong mask type\n");
            matrixCopy(src, dst, width, height);
            break;
    }
}

结果

来看对一副月球图片的锐化效果,分别使用四种模板,其结果是四邻接的两个模板结果相同,八邻接的结果相同,观察两个不同的系数,分别c=0.5和c=0.8,具体系数已经标注在图片上了:

原图:

原图灰度图像:

细节提取:

锐化图像:

总结

总结就是,二阶微分拉普拉斯算子对图像的锐化效果很不错,但对噪声敏感,后面介绍非锐化掩蔽,和一阶微分算子

时间: 2024-08-03 23:33:58

灰度图像--图像增强 拉普拉斯算子的相关文章

灰度图像--图像增强 Robert算子、Sobel算子

学习DIP第36天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意.有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!!!! 文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro

拉普拉斯算子

%function PicOut=Lap_edge(PicInput,thresh)           PicInput=imread('c:/boat.png');thresh=45;% 本程序能够将BMP格式的黑白灰度图像用拉普拉斯算子进行边缘检测% 生物图像处理作业2% 格式为 a=Lap_edge(PicInput,thresh) 或者嵌套为 Lap_edge(imread('rice.tif'),15)% thresh参数可自选,对于rice.tif这张图来说最合适的值大约为14到1

灰度图像--图像分割 Robert算子

学习DIP第43天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意.有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!!!! 文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro

Opencv拉普拉斯算子做图像增强

Opencv拉普拉斯算子——图像增强 #include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; //拉普拉斯处理 cv::Mat laplaceMat(cv::Mat imgParam); int main(int argc, char *argv[]) { Mat image = imread("D:\\images\\JK$DPF6315~A4G

paper 109 :图像处理中的拉普拉斯算子

1.基本理论 拉普拉斯算子是最简单的各向同性微分算子,具有旋转不变性.一个二维图像函数 的拉普拉斯变换是各向同性的二阶导数,定义为:   为了更适合于数字图像处理,将该方程表示为离散形式:    另外,拉普拉斯算子还可以表示成模板的形式,如图5-9所示.图5-9(a)表示离散拉普拉斯算子的模板,图5-9(b)表示其扩展模板,图5-9(c)则分别表示其他两种拉普拉斯的实现模板.从模板形式容易看出,如果在图像中一个较暗的区域中出现了一个亮点,那么用拉普拉斯运算就会使这个亮点变得更亮.因为图像中的边缘

数学之路-python计算实战(20)-机器视觉-拉普拉斯算子卷积滤波

拉普拉斯算子进行二维卷积计算,线性锐化滤波 # -*- coding: utf-8 -*- #线性锐化滤波-拉普拉斯算子进行二维卷积计算 #code:[email protected] import cv2 import numpy as np from scipy import signal fn="test6.jpg" myimg=cv2.imread(fn) img=cv2.cvtColor(myimg,cv2.COLOR_BGR2GRAY) srcimg=np.array(im

图像处理-线性滤波-2 图像微分(1、2阶导数和拉普拉斯算子)

更复杂些的滤波算子一般是先利用高斯滤波来平滑,然后计算其1阶和2阶微分.由于它们滤除高频和低频,因此称为带通滤波器(band-pass filters). 在介绍具体的带通滤波器前,先介绍必备的图像微分知识. 1 一阶导数 连续函数,其微分可表达为 ,或                         (1.1) 对于离散情况(图像),其导数必须用差分方差来近似,有 ,前向差分 forward differencing                  (1.2)  ,中心差分 central

使用二阶微分锐化图像(拉普拉斯算子)基本原理及Python实现

1. 拉普拉斯算子 1.1 简介 一种典型的各向同性的微分算子,可用于检测图像中灰度图片的区域 $$ \nabla^{2} f=\frac{\partial^{2} f}{\partial x^{2}}+\frac{\partial^{2} f}{\partial y^{2}} $$ 根据上述的差分近似可以推导出 $$ \nabla^{2} f(x, y)=f(x+1, y)+f(x-1, y)+f(x, y+1)+f(x, y-1)-4 f(x, y) $$ 1.2 锐化过程 使用拉普拉斯过滤

OpenCV-跟我一起学数字图像处理之拉普拉斯算子

Laplace算子和Sobel算子一样,属于空间锐化滤波操作.起本质与前面的Spatial Filter操作大同小异,下面就通过Laplace算子来介绍一下空间锐化滤波,并对OpenCV中提供的Laplacian函数进行一些说明. 数学原理 离散函数导数 离散函数的导数退化成了差分,一维一阶差分公式和二阶差分公式分别为, Laplace算子的差分形式 分别对Laplace算子x,y两个方向的二阶导数进行差分就得到了离散函数的Laplace算子. 在一个二维函数f(x,y)中,x,y两个方向的二阶