Sobel锐化图像

作为代码界的菜鸟,最近在尝试着用vs实现《数字图像处理与机器视觉》一书中有关图像处理的VC++代码。目前在研究空间域增强,希望自己能够越走越远^_^
本篇是图像锐化中的Sobel锐化图像的实现。

#include <iostream>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>
using namespace std;
using namespace cv;
//Sobel垂直边缘检测
float Template_Smooth_HSobel[9] = { -1, 0, 1, -2, 0, 2, -1, 0, 1 };
//Sobel水平边缘检测
float Template_Smooth_VSobel[9] = { -1, -2, -1, 0, 0, 0, 1, 2, 1 };
void FilterSobel(Mat img, Mat &dst)
{
    Mat test1 = dst.clone();
    Mat test2 = dst.clone();
    Template(img, test1, 3, 3, 1, 1, Template_Smooth_HSobel, 1);
    Template(img, test2, 3, 3, 1, 1, Template_Smooth_VSobel, 1);
    dst = test1 + test2;
}

void main()
{
    Mat img = imread("2.jpg");
    cvNamedWindow("原图", CV_WINDOW_FREERATIO);
    imshow("原图", img);
    Mat dst=img.clone();    
    ////Sobel梯度
    FilterSobel(img, dst);
    cvNamedWindow("Sobel锐化", CV_WINDOW_FREERATIO);
    imshow("Sobel锐化", dst);
    waitKey(0);
}

原图:
原图
结果图:
结果图
这个结果真不想贴出来,丑瞎了。。。

### 使用 Sobel 算子实现图像锐化的原理 Sobel 算子是一种基于卷积的离散性差分算子,由两组卷积核构成,分别用于横向(Gx)和纵向(Gy)边缘检测。这两个方向的卷积核如下所示: 对于 Gx 卷积核: \[ G_x = \begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix} \] 对于 Gy 卷积核: \[ G_y = \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{bmatrix} \] 通过与图像中的每个像素点进行卷积运算,可以得到该像素点在横向和纵向上的一阶偏导数值,即梯度值。 为了获得更精确的结果,通常会计算两个方向上梯度的合成值 \( G \),其公式为: \[ G = \sqrt{{G_x}^2 + {G_y}^2} \][^2] 此操作能够突出显示图像中强度变化显著的地方,从而达到增强边界的效果,进而使整个图像看起来更加清晰锐利[^3]。 ### 实现 Sobel 锐化的方法 以下是使用 MATLAB 或 Octave 编写的简单代码片段来展示如何应用 Sobel 算子来进行图像锐化处理: ```matlab % 加载并转换成灰度图 Image = rgb2gray(imread('example_image.jpg')); Image_double = double(Image); % 定义 Sobel 滤波器矩阵 sobel_x = [-1, 0, 1; -2, 0, 2; -1, 0, 1]; sobel_y = sobel_x'; % 对原始图像做卷积求解 X 和 Y 方向上的梯度幅值 Ix = conv2(Image_double, sobel_x,'same'); Iy = conv2(Image_double, sobel_y,'same'); % 计算总的梯度幅度作为最终输出 GradientMagnitude = sqrt(Ix.^2 + Iy.^2); imshow(uint8(GradientMagnitude)); ``` 上述代码首先读取了一张彩色图片,并将其转化为灰度模式;接着定义了标准形式下的 Sobel 过滤模板 `sobel_x` 及其转置版本 `sobel_y`; 接下来运用二维卷积函数 `conv2()` 来获取水平 (`Ix`) 和垂直(`Iy`) 的一阶梯度估计;最后根据这些信息构建了一个新的表示图像边界的数组 GradientMagnitude 并显示出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值