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

图像处理:Python使用OpenCV进行图像锐化 (非锐化掩模、拉普拉斯滤波器)

文章目录

      • 非锐化掩模 (Unsharp Masking)
      • 拉普拉斯滤波器 (Laplacian Filter)
      • 效果对比
      • 总结

在图像处理中,锐化操作用于增强图像的边缘和细节,使图像看起来更清晰。常见的图像锐化方法包括非锐化掩模(Unsharp Masking)和拉普拉斯滤波器(Laplacian Filter)。

非锐化掩模 (Unsharp Masking)

步骤

  1. 模糊图像:使用高斯模糊滤波器对原图像进行模糊处理,得到模糊图像。
  2. 计算细节层:通过从原图像中减去模糊图像,得到细节层。
  3. 增强图像:将细节层乘以一个增益系数后加回到原图像,得到增强后的图像。

公式
设原图像为 ( I ),模糊图像为 (I blur ),细节层为 ( D ),增益系数为 ( k ),最终的锐化图像 ( I’ ) 计算如下:

D = I − I blur D = I - I_{\text{blur}} D=IIblur

I ′ = I + k ⋅ D I' = I + k \cdot D I=I+kD

代码示例

import cv2
import numpy as npdef unsharp_mask(image, k=1.5):# 高斯模糊图像blurred = cv2.GaussianBlur(image, (9, 9), 10.0)# 计算细节层detail = image - blurred# 增强图像sharpened = image + k * detailreturn np.clip(sharpened, 0, 255).astype(np.uint8)image = cv2.imread('Task3.jpg')
sharpened_image = unsharp_mask(image)
cv2.imshow('Original Image', image)
cv2.imshow('Unsharp Masked Image', sharpened_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

拉普拉斯滤波器 (Laplacian Filter)

步骤

  1. 计算拉普拉斯图像:使用拉普拉斯算子计算图像的二阶导数,得到拉普拉斯图像。
  2. 增强图像:将拉普拉斯图像加回到原图像中,得到锐化后的图像。

公式
设原图像为 ( I ),拉普拉斯图像为 ( L ),最终的锐化图像 ( I’ ) 计算如下:

L = Δ I = ∂ 2 I ∂ x 2 + ∂ 2 I ∂ y 2 L = \Delta I = \frac{\partial^2 I}{\partial x^2} + \frac{\partial^2 I}{\partial y^2} L=ΔI=x22I+y22I

I ′ = I + k ⋅ L I' = I + k \cdot L I=I+kL

代码示例

import cv2
import numpy as npdef laplacian_sharpen(image, k=1.0):# 计算拉普拉斯图像laplacian = cv2.Laplacian(image, cv2.CV_64F)laplacian = np.uint8(np.absolute(laplacian))# 增强图像sharpened = cv2.addWeighted(image, 1, laplacian, k, 0)return sharpenedimage = cv2.imread('path_to_your_image.jpg')
sharpened_image = laplacian_sharpen(image)
cv2.imshow('Original Image', image)
cv2.imshow('Laplacian Sharpened Image', sharpened_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果对比

了将非锐化掩模(Unsharp Masking)和拉普拉斯滤波器(Laplacian Filter)的方法整合到一个代码中,并对比展示效果,将两个锐化方法的结果放在同一个窗口中进行展示

import cv2
import numpy as np
import matplotlib.pyplot as pltdef unsharp_mask(image, k=1.5):# 高斯模糊图像blurred = cv2.GaussianBlur(image, (9, 9), 10.0)# 计算细节层detail = image - blurred# 增强图像sharpened = image + k * detailreturn np.clip(sharpened, 0, 255).astype(np.uint8)def laplacian_sharpen(image, k=1.0):# 计算拉普拉斯图像laplacian = cv2.Laplacian(image, cv2.CV_64F)laplacian = np.uint8(np.absolute(laplacian))# 增强图像sharpened = cv2.addWeighted(image, 1, laplacian, k, 0)return sharpeneddef display_images(original, unsharp, laplacian):titles = ['Original Image', 'Unsharp Masked ', 'Laplacian Sharpened ']images = [original, unsharp, laplacian]plt.figure(figsize=(10, 10)) for i in range(3):plt.subplot(1, 3, i + 1)plt.imshow(cv2.cvtColor(images[i], cv2.COLOR_BGR2RGB))plt.title(titles[i])plt.xticks([]), plt.yticks([])plt.show()def main():image_path = 'Task3.jpg'  # 请替换为你的图像路径image = cv2.imread(image_path)if image is None:print(f"Error: Unable to load image at {image_path}")returnunsharp_image = unsharp_mask(image)laplacian_image = laplacian_sharpen(image)display_images(image, unsharp_image, laplacian_image)if __name__ == "__main__":main()

具体效果对比如下:不同的图片的效果可能不同
在这里插入图片描述

总结

这两种锐化方法各有优缺点,要根据具体需求选择合适的方法:

  • 非锐化掩模

    • 优点:能够灵活控制图像的锐化程度,通过调整增益系数和模糊程度,可以获得较为自然的锐化效果。
    • 缺点:在处理带有高噪声的图像时,容易放大噪声。
  • 拉普拉斯滤波器

    • 优点:计算简单,能够快速增强图像边缘和细节。
    • 缺点:容易引入噪声和伪影,对噪声不敏感的图像效果更好。

通过应用这些方法,可以有效增强图像的边缘和细节,使图像看起来更加清晰和锐利。

相关文章:

  • R调用Taxonkit展示系统发育信息
  • c++_0基础_讲解7 练习
  • C++中的中介者模式
  • 2.linux下的文件系统结构、磁盘管理以及常规操作
  • Excel中多条件判断公式怎么写?
  • Linux:基础IO(二.缓冲区、模拟一下缓冲区、详细讲解文件系统)
  • Ubuntu安装部署
  • [渗透测试学习] Runner-HackTheBox
  • 【Netty】ByteBuffer原理与使用
  • Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
  • C/C++ Adaline自适应线性神经网络算法详解及源码
  • 自学前端第一天
  • Android14音频进阶之CarAudioManager::getOutputDeviceForUsage流程分析(七十七)
  • Mybatis做批量操作
  • ffmpeg解封装rtsp并录制视频-(1)解封装rtsp断网或摄像机重启后自动重连处理
  • 【React系列】如何构建React应用程序
  • 【面试系列】之二:关于js原型
  • CSS相对定位
  • input的行数自动增减
  • k8s 面向应用开发者的基础命令
  • Mysql5.6主从复制
  • Nodejs和JavaWeb协助开发
  • passportjs 源码分析
  • Python学习之路16-使用API
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • RxJS: 简单入门
  • windows下mongoDB的环境配置
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 猴子数据域名防封接口降低小说被封的风险
  • 来,膜拜下android roadmap,强大的执行力
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 以太坊客户端Geth命令参数详解
  • 自动记录MySQL慢查询快照脚本
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • #pragma data_seg 共享数据区(转)
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (四) 虚拟摄像头vivi体验
  • (一) storm的集群安装与配置
  • (译) 函数式 JS #1:简介
  • (转)VC++中ondraw在什么时候调用的
  • .net 7和core版 SignalR
  • .NET 8 跨平台高性能边缘采集网关
  • .net dataexcel 脚本公式 函数源码
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .net流程开发平台的一些难点(1)
  • .sh 的运行
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [20170705]diff比较执行结果的内容.txt