当前位置: 首页 > news >正文

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

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

系列文章:

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

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

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

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

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

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

(七)图像的均值滤波

(八)图像的中值滤波

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

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

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

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

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

目录

一、罗伯特梯度锐化简介 

二、算法流程

三、代码实现

四、实验结果

1、读入的图像

2、经过罗伯特梯度处理后的图像


一、罗伯特梯度锐化简介 

图像的罗伯特梯度锐化是一种基于梯度的图像处理方法,主要用于增强图像的边缘和细节

罗伯特梯度锐化方法主要包括以下几个步骤:

1、噪声减少:在进行锐化处理之前,通常需要先对图像进行平滑处理,以减少噪声的影响。这是通过使用高斯滤波器或其他平滑技术来实现的。

2、边缘检测:罗伯特梯度锐化是通过计算图像在水平和垂直方向上的梯度大小和方向来检测边缘的。罗伯特算子利用交叉微分来计算像素点处的梯度强度和方向。

3、梯度计算:罗伯特交叉算子定义为两个模板,一个用于水平方向的边缘检测,另一个用于垂直方向。通过这两个模板的应用,可以计算出图像的梯度图像。

4、图像锐化:根据计算出的梯度信息,可以增强图像的边缘和细节,从而使模糊的图像变得更加清晰。

5、注意信噪比:在进行图像锐化时,需要注意处理的图像必须有较高的信噪比,否则锐化过程可能会放大噪声,影响图像质量。

6、边缘提取:除了锐化,罗伯特算子也常用于图像的边缘提取,这有助于进一步分析图像内容。

罗伯特梯度锐化是一种有效的图像处理技术,它通过增强图像的边缘和细节来提高图像的清晰度,适用于各种需要改善图像质量的应用场景。

二、算法流程

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

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

2、用方向1模板计算后取绝对值再加上方向2模板计算后取绝对值

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

三、代码实现

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/03/ 21:23* @Attention: 转载, 引用请注明出处*/public class RobertGradient {//加载本地动态链接库static {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}//罗伯特梯度锐化public Mat robertSharping(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];}}//用2×2窗口进行滤波int[][] mat_arr_robertSharp = new int[rows][cols];for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {//处理非最后一行和非最后一列的像素if (i != rows - 1 && j != cols - 1) {//中心像素的2×2窗口int[][] temp = new int[2][2];temp[0][0] = mat_arr[i][j];temp[0][1] = mat_arr[i][j + 1];temp[1][0] = mat_arr[i + 1][j];temp[1][1] = mat_arr[i + 1][j + 1];mat_arr_robertSharp[i][j] = Math.abs(temp[0][0] - temp[1][1])+ Math.abs(temp[0][1] - temp[1][0]);} else {    //处理最后一行和最后一列的像素mat_arr_robertSharp[i][j] = mat_arr[i][j];}}}//合成图像Mat mat_robertSharp = new Mat(rows, cols, CvType.CV_32SC1);//将像素放入图像for (int i = 0; i < rows; i++) {//一次放入一行像素值mat_robertSharp.put(i, 0, mat_arr_robertSharp[i]);}return mat_robertSharp;}public static void main(String[] args) {RobertGradient rg = new RobertGradient();Mat mat = rg.robertSharping("D:\\Project\\IDEA_Project\\RS01\\src\\rs01\\img\\2_gray.png");//将经过罗伯特梯度锐化后的图像写入文件Imgcodecs.imwrite("D:\\Project\\IDEA_Project\\RS01\\src\\rs01\\img\\2_gray_rg.png", mat);}
}

四、实验结果

1、读入的图像

2、经过罗伯特梯度处理后的图像

相关文章:

  • es6 Class基本语法和继承
  • 天空卫士SASE 2.0:赋能您的数智安全
  • 建立一个简单的网页音乐盒模型效果#css#h5
  • 量化交易入门(二十九)布林带指标实现和回测
  • C语言最大公约数(辗转相除法)
  • elasticsearch _cat/indices docs.count is different than <index>/_count
  • 笔迹/签名数据集汇总
  • Linux部分命令
  • OSCP靶场--RubyDome
  • OC对象 - Block解决循环引用
  • AWTK 开源串口屏开发(15) - 通过 MODBUS 访问远程设备数据
  • 【微服务】认识Dubbo+基本环境搭建
  • 【QT学习】1.qt初识,创建qt工程,使用按钮,第一个交互按钮
  • Kafka开机自启脚本
  • 数据结构:单调栈和单调队列
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • Android组件 - 收藏集 - 掘金
  • create-react-app做的留言板
  • CSS盒模型深入
  • python 学习笔记 - Queue Pipes,进程间通讯
  • SQL 难点解决:记录的引用
  • Vue--数据传输
  • Yeoman_Bower_Grunt
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 你不可错过的前端面试题(一)
  • 深度学习中的信息论知识详解
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 用Python写一份独特的元宵节祝福
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 如何用纯 CSS 创作一个货车 loader
  • ​香农与信息论三大定律
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (2015)JS ES6 必知的十个 特性
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (ZT)一个美国文科博士的YardLife
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • .NET : 在VS2008中计算代码度量值
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET连接数据库方式
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • /etc/motd and /etc/issue
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • []C/C++读取串口接收到的数据程序
  • [android] 切换界面的通用处理
  • [BZOJ5250][九省联考2018]秘密袭击(DP)
  • [C/C++]数据结构----顺序表的实现(增删查改)
  • [CareerCup] 2.1 Remove Duplicates from Unsorted List 移除无序链表中的重复项
  • [CSS]浮动
  • [Flex][问题笔记]TextArea滚动条问题
  • [github全教程]github版本控制最全教学------- 大厂找工作面试必备!
  • [GN] 设计模式——面向对象设计原则概述