前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图像处理基础-拉普拉斯锐化

图像处理基础-拉普拉斯锐化

作者头像
公号sumsmile
发布2020-10-29 11:35:54
1.7K0
发布2020-10-29 11:35:54
举报

一、拉普拉斯算法

拉普拉斯算法,数学描述上是求二阶导数,如果忘了高数里的二阶导,可以理解为简单的模板算子:

4领域和8领域的拉普拉斯算子:

四领域拉普拉斯算子:

八领域拉普拉斯算子:

拉普拉斯锐化计算:

实现效果:

二、拉普拉斯算法实现:

代码看起来多,其实核心逻辑非常简单,比前面讲的高斯算子简单多了

代码语言:javascript
复制
#include"f_LaplaceSharpen.h"
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<stdio.h>
#include"Commen.h"

int f_LaplaceSharpen(unsigned char* srcData,int width, int height,int stride,int mode)
{
    int ret = 0;
    unsigned char* tempData = (unsigned char*)malloc(sizeof(unsigned char) * height * stride);
    int offset = stride - width * 4;
    int pos;
    memcpy(tempData, srcData, sizeof(unsigned char) * height * stride);
    if(mode == 0)
    {
        for(int j = 1; j < height - 1; j++)
        {
            for(int i = 1; i < width - 1; i++)
            {
                pos = i * 4 + j * stride;
                srcData[pos] = CLIP3(tempData[pos] + (tempData[pos] * 4 - tempData[pos - stride] - tempData[pos - 4] - tempData[pos + 4] - tempData[pos + stride]), 0, 255);
                pos++;
                srcData[pos] = CLIP3(tempData[pos] + (tempData[pos] * 4 - tempData[pos - stride] - tempData[pos - 4] - tempData[pos + 4] - tempData[pos + stride]), 0, 255);
                pos++;
                srcData[pos] = CLIP3(tempData[pos] + (tempData[pos] * 4 - tempData[pos - stride] - tempData[pos - 4] - tempData[pos + 4] - tempData[pos + stride]), 0, 255);
            }
        }
    }
    else
    {
        for(int j = 1; j < height - 1; j++)
        {
            for(int i = 1; i < width - 1; i++)
            {
                pos = i * 4 + j * stride;
                srcData[pos] = CLIP3(tempData[pos] + (tempData[pos] * 8 - tempData[pos - stride] - tempData[pos - 4] - tempData[pos + 4] - tempData[pos + stride] - tempData[pos - 4 - stride] - tempData[pos + 4 - stride] - tempData[pos - 4 + stride] - tempData[pos + 4 + stride]), 0, 255);
                pos++;
                srcData[pos] = CLIP3(tempData[pos] + (tempData[pos] * 8 - tempData[pos - stride] - tempData[pos - 4] - tempData[pos + 4] - tempData[pos + stride] - tempData[pos - 4 - stride] - tempData[pos + 4 - stride] - tempData[pos - 4 + stride] - tempData[pos + 4 + stride]), 0, 255);
                pos++;
                srcData[pos] = CLIP3(tempData[pos] + (tempData[pos] * 8 - tempData[pos - stride] - tempData[pos - 4] - tempData[pos + 4] - tempData[pos + stride] - tempData[pos - 4 - stride] - tempData[pos + 4 - stride] - tempData[pos - 4 + stride] - tempData[pos + 4 + stride]), 0, 255);
            }
        }
    }
    free(tempData);
    return ret;
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、拉普拉斯算法
  • 二、拉普拉斯算法实现:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档