C++——bmp图像的平滑、锐化(拉普拉斯+sobel+prewitt+Roberts Cross operator)

本文介绍了C++中对RGB和灰度图像进行平滑、锐化的处理方法,包括Box模板、高斯模板和中值滤波的平滑,以及拉普拉斯、Sobel、Prewitt和Roberts Cross算子的锐化。详细讲述了各种算子的原理和应用,并提供了相应的代码实现。
摘要由CSDN通过智能技术生成

本文实现了RGB三通道图像及灰度图像的平滑、锐化处理。在开始之前,我们先对平滑及锐化的概念进行一个简单的了解:

1、平滑

       图像平滑是指受传感器和大气等因素的影响,遥感图像上会出现某些亮度变化过大的区域,或出现一些亮点(也称噪声)。这种为了抑制噪声,使图像亮度趋于平缓的处理方法就是图像平滑。图像平滑实际上是低通滤波,平滑过程会导致图像边缘模糊化。

常用的平滑处理方法有三种:
(1) Box模板去噪平滑处理,也就是均一化处理。
                     Box模板是{1,1,1,1,1,1,1,1,1}
(2) 高斯模板去噪平滑处理,就是在Box模板的基础上加入了加权系数,考虑了距离某点位置越近影响越大的因素。相比Box模板,较为清晰一些。
                     高斯模板是{1,2,1,2,4,2,1,2,1}

(3) 中值滤波去噪平滑处理,就是将该点左右邻近的两个点的rgb值与该点自身进行比较,选择其中最中间的值赋给该点。

2、锐化

       图像锐化(image sharpening)是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空域处理和频域处理两类。图像锐化是为了突出图像上地物的边缘、轮廓,或某些线性目标要素的特征。这种滤波方法提高了地物边缘与周围像元之间的反差,因此也被称为边缘增强

常用的锐化模板是拉普拉斯(Laplacian)算子:


代码如下:

#include <cstring>
#include <windows.h>
#include"readbmp.h"
#include"savebmp.h"

int Template1[3][3] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 };//平滑模板  均一化处理
int Template2[3][3] = { 1, 2, 1, 2, 4, 2, 1, 2, 1 };//高斯平模板  
int Template3[3][3] = { 0, -1, 0, -1, 4, -1, 0, -1, 0 };//laplace锐化模板,4邻域  
int Template4[3][3] = { -1, -1, -1, -1, 8, -1, -1, -1, -1 };//laplace锐化模板,8邻域  
int sobelx[3][3] = { -1,-2,-1,0,0,0,1,2,1};//sobelx
int sobely[3][3] = { -1,0,1,-2,0,2,-1,0,1};//sobel  
int coefficient1 = 9;
int coefficient2 = 16;
int coefficient3 = 1;

void img_smooth_sharpen(int Templa
  • 8
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值