(十二)图像的Sobel梯度锐化

环境:Windows10专业版 + IDEA2021.2.3 + jdk11.0.1 + OpenCV-460.jar

系列文章:

(一)Python+GDAL实现BSQ,BIP,BIL格式的相互转换

(二)BSQ,BIL,BIP存储格式的相互转换算法

(三)单波段图像的伪彩色合成:密度分割(含介绍OpenCV中的Mat类)

(四)图像的%2线性拉伸

(五)图像的标准假彩色合成

(六)图像的直方图均衡化

(七)图像的均值滤波

(八)图像的中值滤波

(九)图像的高斯低通滤波

(十)图像的梯度倒数加权平滑

(十一)图像的罗伯特梯度锐化

(十二)图像的Sobel梯度锐化

(十三)图像的拉普拉斯梯度锐化

目录

一、Sobel梯度锐化简介

二、算法流程

三、代码实现

四、实验结果

1、读入的图像

2、经过Sobel梯度处理后的图像


一、Sobel梯度锐化简介

Sobel梯度锐化是一种基于Sobel算子的图像处理方法,用于增强图像的边缘和细节

Sobel算子是一种用于边缘检测的算法,它通过计算图像中每个像素点的梯度强度和方向来突出显示图像的边缘。Sobel算子包括两个3x3的矩阵,分别用于水平和垂直方向的边缘检测。这两个矩阵与图像进行卷积运算,从而得到水平和垂直方向的梯度近似值。Sobel算子的特点是它认为相邻点的距离远近对当前像素点的影响是不同的,距离越近的像素点对当前像素的影响越大,这样的加权方式使得Sobel算子在进行边缘检测时能够更好地突出边缘轮廓。

在图像处理中,Sobel算子的应用主要包括以下关键点:

1、边缘检测:Sobel算子可以有效地检测出图像中的边缘,这对于图像分析和理解至关重要。边缘通常代表了图像中的重要结构信息,如物体的轮廓等。

2、图像锐化:通过强调图像的边缘,Sobel算子可以使图像看起来更清晰,细节更加突出。这在图像锐化处理中非常有用,尤其是在需要增强图像细节的情况下。

3、噪声抑制:虽然Sobel算子主要用于边缘检测,但它也可以帮助减少图像中的随机噪声,因为它主要关注于图像中的结构性变化,而不是随机的小幅度变化。

4、优缺点:对边缘的检测更加精确;但不适用于含有大量噪声的图像。

Sobel梯度锐化是图像处理中的一个基本而重要的技术,它在边缘检测、图像锐化和噪声抑制等方面有着广泛的应用。

二、算法流程

(以单波段灰度图像为例)

1、利用OpenCV读入图像,将像素存储在数组里

2、h1突出水平方向上的特征,h2突出垂直方向上的特征,用水平方向上的模板h1计算后取绝对值再加上垂直方向上的模板h2计算后取绝对值

3、将经过Sobel梯度处理后的像素值存入数组合成图像并存储

三、代码实现

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;/*** @Author: HNUST_jue_chen* @Date: 2022/11/04/ 22:04* @Attention: 转载, 引用请注明出处*/public class SobelGradient {//加载本地动态链接库static {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}//Sobel梯度锐化public Mat sobelSharping(String path) {//使用Mat类存储图像信息Mat mat = Imgcodecs.imread(path);//图像的大小int rows = mat.rows();int cols = mat.cols();//获得原图像像素数组int[][] mat_arr = new int[rows][cols];for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {mat_arr[i][j] = (int) mat.get(i, j)[0];}}//用Sobel算子进行锐化int[][] mat_arr_sobelSharp = new int[rows][cols];for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {//处理非边缘的像素if (i != 0 && i != rows - 1 && j != 0 && j != cols - 1) {mat_arr_sobelSharp[i][j] = Math.abs((mat_arr[i - 1][j - 1] * (-1)) + mat_arr[i - 1][j] * (-2)+ mat_arr[i - 1][j + 1] * (-1) + (mat_arr[i + 1][j - 1])+ mat_arr[i + 1][j] * (2) + mat_arr[i + 1][j + 1])+ Math.abs((mat_arr[i - 1][j - 1] * (-1)) + mat_arr[i][j - 1] * (-2)+ mat_arr[i + 1][j - 1] * (-1) + (mat_arr[i - 1][j + 1])+ mat_arr[i][j + 1] * (2) + mat_arr[i + 1][j + 1]);} else {    //处理边缘的像素mat_arr_sobelSharp[i][j] = mat_arr[i][j];}}}//合成图像Mat mat_sobelSharp = new Mat(rows, cols, CvType.CV_32SC1);//将像素放入图像for (int i = 0; i < rows; i++) {//一次放入一行像素值mat_sobelSharp.put(i, 0, mat_arr_sobelSharp[i]);}return mat_sobelSharp;}public static void main(String[] args) {SobelGradient sg = new SobelGradient();Mat mat = sg.sobelSharping("D:\\Project\\IDEA_Project\\RS01\\src\\rs01\\img\\2_gray.png");//将经过Sobel锐化后的图像写入文件Imgcodecs.imwrite("D:\\Project\\IDEA_Project\\RS01\\src\\rs01\\img\\2_gray_sg.png", mat);}
}

四、实验结果

1、读入的图像

2、经过Sobel梯度处理后的图像

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/578491.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp开发微信小程序设置分包,简单易学

文章目录 前言一、在 manifest.json文件中的源码试图中配置二、配置pages.json 前言 我们使用uniapp开发微信小程序的时候&#xff0c;当我们的包体积过大的时候&#xff0c;无法真机模拟。 因为小程序单个包只支持2MB&#xff08;现已支持预览4MB&#xff09;&#xff0c;所以…

使用dlv配合goland调试在wsl中运行的go程序

参考文章&#xff1a;https://marksuper.xyz/2021/06/29/dlv-goland/ 首先安装一下dlv这个工具&#xff1a; git clone GitHub - go-delve/delve: Delve is a debugger for the Go programming language. cd delve go install github.com/go-delve/delve/cmd/dlv 我们直接开始配…

element-ui inputNumber 组件源码分享

今日简单分享 inputNumber 组件的实现原理&#xff0c;主要从以下四个方面来分享&#xff1a; 1、inputNumber 组件的页面结构 2、inputNumber 组件的属性 3、inputNumber 组件的事件 4、inputNumber 组件的方法 一、inputNumber 组件的页面结构。 二、inputNumber 组件的…

2024年MathorCup数学建模思路A题B题C题D题思路分享

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

代码随想录算法训练营第二十四天(回溯1)|77. 组合(JAVA)

文章目录 回溯理论基础概念类型回溯模板 77. 组合解题思路源码 回溯理论基础 概念 回溯是递归的副产品&#xff0c;本质上是一种穷举 回溯解决的问题可以抽象为一种树形结构 类型 回溯主要用来解决以下问题 组合问题&#xff1a;N个数里面按一定规则找出k个数的集合切割问…

2024年水电站大坝安全监测工作提升要点

根据《水电站大坝运行安全监督管理规定》&#xff08;国家发改委令第23号&#xff09;和《水电站大坝运行安全信息报送办法》&#xff08;国能安全〔2016〕261号&#xff09;的相关规定、要求&#xff0c;电力企业应当在汛期向我中心报送每日大坝汛情。近期&#xff0c;全国各地…

动态内存管理+柔性数组

动态内存存在的意义 C语言是一种过程式编程语言&#xff0c;提供了底层访问能力和丰富的功能&#xff0c;广泛应用于操作系统、嵌入式系统、硬件驱动程序等领域。C语言的动态内存管理主要是通过malloc()、calloc()、realloc()和free()这几个标准库函数来实现的。 理解动态内存…

python实战之进阶篇(一)

定义类 1. 构造方法 2. 实例方法 3. 类方法 类似于Java中的静态方法, 使用方式: 类名.类方法 4. 私有变量 5. 私有方法 6. 使用属性set和get

【Vue3源码学习】— CH2.5 reactiveEffect.ts:Vue 3响应式系统的核心

reactiveEffect.ts&#xff1a;Vue 3响应式系统的核心 1. 什么是 reactiveEffect&#xff1f;2. 核心机制2.1 依赖收集&#xff08;Track&#xff09;2.2 触发更新&#xff08;Trigger&#xff09;2.3 效果范围&#xff08;effectScope&#xff09; 3. 源码解析 —— track3.1 …

正点原子imx6ull-mini不使用网络更新内核系统

参考视频&#xff1a;【【正点原子】Linux网络环境搭建篇】 参考文档&#xff1a;从正点原子官方下载 这几天在学imx6ull写网络驱动检测出网卡&#xff0c;但是一直ping不通ubuntu&#xff0c;电脑还有ubuntu、开发板都处于同一个网段&#xff0c;跟着正点原子的视频试了双网…

用 AI 编程-释放ChatGPT的力量

最近读了本书&#xff0c;是 Sean A Williams 写的&#xff0c;感觉上还是相当不错的。一本薄薄的英文书&#xff0c;还真是写的相当好。如果你想看&#xff0c;还找不到&#xff0c;可以考虑私信我吧。 ChatGPT for Coders Unlock the Power of AI with ChatGPT: A Comprehens…

计数器的原理和应用

一、计数器的原理和应用 要求&#xff1a;每计数三次&#xff0c;数码管值加一 #include<reg51.h> unsigned char s[]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned char num0; void initcounter() {TMOD0x06;//0000 0110TH0256-3;TL0256-3;ET01;EA1;T…