拉普拉斯是使用二阶微分锐化图像,以3*3滤波器中心像素与上下左右像素计算差值,计算公式为:

一阶微分梯度锐化,以3*3滤波器中心像素上方三个像素之和减去下方三个像素之和的绝对值,与左边三个像素减去右边三个像素之和的绝对值,将两个绝对值相加作为中心像素值,公式:

通过java代码实现两种锐化算法,代码如下:

package ImageFilter;import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;public class ImageSharpen {// singletonprivate static ImageSharpen imageSharpen = new ImageSharpen();private ImageSharpen() {}public static ImageSharpen getInstance() {return imageSharpen;}/*** 图像锐化 二阶微分锐化,拉普拉斯算子 定义一个3*3滤波器,计算中心像素与上下左右四个像素差值* * @param image*/public BufferedImage lapLaceSharpDeal(BufferedImage image) {BufferedImage tempImage = new BufferedImage(image.getWidth(), image.getHeight(), image.getType());for (int i = 1; i < image.getWidth() - 1; i++) {for (int j = 1; j < image.getHeight() - 1; j++) {int rgb = image.getRGB(i, j);int rgb1 = image.getRGB(i - 1, j);int rgb2 = image.getRGB(i + 1, j);int rgb3 = image.getRGB(i, j - 1);int rgb4 = image.getRGB(i, j + 1);int[] R = new int[] { (rgb1 >> 16) & 0xff, (rgb2 >> 16) & 0xff, (rgb3 >> 16) & 0xff,(rgb4 >> 16) & 0xff, (rgb >> 16) & 0xff };int[] G = new int[] { (rgb1 >> 8) & 0xff, (rgb2 >> 8) & 0xff, (rgb3 >> 8) & 0xff, (rgb4 >> 8) & 0xff,(rgb >> 8) & 0xff };int[] B = new int[] { rgb1 & 0xff, rgb2 & 0xff, rgb3 & 0xff, rgb4 & 0xff, rgb & 0xff };double dR = R[0] + R[1] + R[2] + R[3] - 4 * R[4];double dG = G[0] + G[1] + G[2] + G[3] - 4 * G[4];double dB = B[0] + B[1] + B[2] + B[3] - 4 * B[4];double r = R[4] - dR;double g = G[4] - dG;double b = B[4] - dB;rgb = (255 & 0xff) << 24 | (clamp((int) r) & 0xff) << 16 | (clamp((int) g) & 0xff) << 8| (clamp((int) b) & 0xff);tempImage.setRGB(i, j, rgb);}}return tempImage;}/*** 一阶微分梯度锐化*/public BufferedImage degreeSharpDeal(BufferedImage image) {BufferedImage tempImage = new BufferedImage(image.getWidth(), image.getHeight(), image.getType());for (int i = 1; i < image.getWidth() - 1; i++) {for (int j = 1; j < image.getHeight() - 1; j++) {List<Integer> rList = new ArrayList<>();List<Integer> gList = new ArrayList<>();List<Integer> bList = new ArrayList<>();for (int x = -1; x < 2; x++) {for (int y = -1; y < 2; y++) {int rgb = image.getRGB(i + x, j + y);int R = (rgb >> 16) & 0xff;int G = (rgb >> 8) & 0xff;int B = rgb & 0xff;rList.add(R);gList.add(G);bList.add(B);}}int r = getResult(rList);int g = getResult(gList);int b = getResult(bList);r = rList.get(4) + r / 4;g = gList.get(4) + g / 4;b = bList.get(4) + b / 4;int rgb = (255 & 0xff) << 24 | (clamp(r) & 0xff) << 16 | (clamp(g) & 0xff) << 8 | (clamp(b) & 0xff);tempImage.setRGB(i, j, rgb);}}return tempImage;}// 执行一阶微分计算private int getResult(List<Integer> list) {int result = Math.abs(list.get(0) + list.get(3) + list.get(6) - list.get(2) - list.get(5) - list.get(8))+ Math.abs(list.get(0) + list.get(1) + list.get(2) - list.get(6) - list.get(7) - list.get(8));return result;}// 判断a,r,g,b值,大于256返回256,小于0则返回0,0到256之间则直接返回原始值private int clamp(int rgb) {if (rgb > 255)return 255;if (rgb < 0)return 0;return rgb;}
}

测试类:

package ImageFilter;import java.awt.image.BufferedImage;
import java.io.File;import javax.imageio.ImageIO;public class test {public static void main(String[] args) throws Exception{File input = new File("E:/桌面/AverageFilter/1.jpg");File output = new File("E:/桌面/AverageFilter/3.jpg");BufferedImage image = ImageIO.read(input);BufferedImage image2 = ImageSharpen.getInstance().degreeSharpDeal(image);ImageIO.write(image2, "jpg", output);}
}

原图:

拉普拉斯锐化结果:

一阶微分梯度锐化结果:

原图是一张比较模糊的图像,对比两种锐化方式,不难看出,拉普拉斯锐化效果明显,但是容易加重噪点;一阶微分梯度锐化对于图像较平坦区域有所保留,对图像边缘锐化效果更加突出,因此在图像分割和边缘检测方面会用到更多梯度处理。

java图像处理之拉普拉斯锐化和一阶微分梯度锐化相关推荐

  1. 基于一阶微分的锐化滤波器---梯度算子(常用于工业检测,产品缺陷检测)

    文章目录 前言 一.常用的非线性锐化滤波器 二.图像能够进行微分的要求 三.基于一阶微分的锐化滤波器---梯度算子(常用于工业检测,产品缺陷检测) 四.如何求解梯度幅值 五.代码 总结 前言 非线性滤 ...

  2. 数字图像处理:(2)一阶微分和二阶微分在数字图像处理中的应用

    1.微分定义 2.微分性质 微分是对函数局部变化率的一种表示. 在图像处理中有基于一阶微分和二阶微分的锐化空间滤波器(图像锐化是增强图像的突变部分),其实一阶微分和二阶微分算子都可以得到图像的边缘,只 ...

  3. 传统经典CV算法_边缘检测概念以及常用一阶微分梯度算子

    边缘检测 图像边缘是图像最基本的特征,所谓边缘(Edge) 是指图像局部特性的不连续性.灰度或结构等信息的突变处称之为边缘.例如,灰度级的突变.颜色的突变,.纹理结构的突变等.边缘是一个区域的结束,也 ...

  4. 数字图像处理学习笔记4:图像增强之空间滤波2(一阶微分锐化滤波(梯度),二阶微分锐化(拉普拉斯),非锐化掩蔽)

    文章目录 前言 一.一阶微分和二阶微分的定义 二.一阶微分锐化滤波:梯度 1.梯度 2.sobel算子及MATLAB代码 二.二阶微分锐化滤波:拉普拉斯算子 1.拉普拉斯算子 2.拉普拉斯算子MATL ...

  5. 图像处理之一阶微分应用

    图像处理之一阶微分应用 一:数学背景 首先看一下一维的微分公式Δf = f(x+1) – f(x), 对于一幅二维的数字图像f(x,y)而言,需要完 成XY两个方向上的微分,所以有如下的公式: 分别对 ...

  6. 使用一阶微分对图像锐化

    Using First-Order Derivatives for (Nonlinear)Image Sharpening ----The Gradient 对于函数ƒ(x,y), ƒ在坐标(x,y) ...

  7. java毕业设计——基于java+图像处理技术的医学图像处理系统设计与实现(毕业论文+程序源码)——医学图像处理系统

    基于java+图像处理技术的医学图像处理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+图像处理技术的医学图像处理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦 ...

  8. Python中的图像处理(第十一章)Python图像锐化及边缘检测(1)

    Python中的图像处理(第十一章)Python图像锐化及边缘检测(1) 前言 一. Python准备 二. Python仿真 三. 小结 前言 随着人工智能研究的不断兴起,Python的应用也在不断 ...

  9. (四)图像的空域锐化_一阶梯度算子

    一,实验原理 图像锐化:增强图像的边缘或轮廓. 图像平滑通过积分过程使得图像边缘模糊,图像锐化则通过微分而使图像边缘突出.清晰. 梯度锐化法: 图像处理中应用微分最常用的方法是计算梯度.对于图像f(x ...

最新文章

  1. 仅使用OpenCV实现活体检测!(附源码)
  2. 深度报告:一文看懂生物芯片产业
  3. POJ 2417 Discrete Logging 离散对数
  4. UA MATH564 概率论 多元随机变量的变换 理论与应用2
  5. 《Java并发编程的艺术》一一第2章Java并发机制的底层实现原理
  6. 理解Shadow DOM
  7. hotelling t2 matlab,pca主成份分析方法
  8. 机器学习实战之决策树
  9. win10去掉快捷方式小箭头_简单几步,教你怎么去掉win10电脑图标小箭头
  10. php response响应,9. 响应 (Response)
  11. 鸿蒙之光一星辰是什么意思,如果说安卓的目标是太阳,那么鸿蒙的目标就是星辰大海...
  12. mysql如何大矩阵_如何打印矩阵
  13. 【DFS + 记忆化递归 + DP】LeetCode 91. Decode Ways
  14. java的左移位()和右移位()和无符号右移()
  15. win10系统 安装modelsim64位的无法生成license文件的解决办法
  16. 343.微生物组研究写作的一般思路
  17. 罗技键盘鼠标接收器丢了 怎么连接别的接收器
  18. C#编程,DateTime使用方法,时间转字符方法总结
  19. 华中农业大学计算机专业考研,2020华中农业大学计算机专业课改考408
  20. 设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类来继承图形类,并实现上述两个方法。并创建实例验证。

热门文章

  1. Zookeeper 客户端源码吐血总结
  2. 【测试点分析】1060 爱丁顿数 (25分)_21行代码
  3. Web前端开发笔记——第三章 CSS语言 第六节 CSS定位
  4. linux 标准输入句柄,标准文件描述符与标准文件句柄
  5. Linux系统安全与应用(二)——安全机制、安全控制、弱口令检测JR、网络扫描NMAP和控制台命令Netstat
  6. hcia是什么等级的证书_华为的HCNA,HCNP,HCIE认证证书都有什么用?
  7. maven 排除pom依赖_Maven依赖排除 禁止依赖传递 取消依赖的方法
  8. android opencv 识别文字_基于SpringBoot的车牌识别系统(附项目地址)
  9. mq多个消费者消费一个消息_一个普通消费者的米家产品使用感受
  10. android多条件查询数据,Android GreenDao 条件查询问题