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

关于图像锐化的一份介绍

在这篇文章中,我将介绍有关图像锐化有关的知识,具体包括锐化的简单介绍、一阶锐化与二阶锐化等方面内容。

一、锐化

1.1 概念 

锐化(sharpening)就是指将图象中灰度差增大的方法,一次来增强物体的轮廓与边缘。因为发生锐化的地方都是发生灰度差突变的地方,所以锐化算法都是基于微分作用。

1.2 作用

一般来说,锐化增强灰度差,除了使物体与轮廓的细节增强后,它还是重要的预处理的一步,为了方便之后的物体检测与识别等。

二、一阶微分锐化方法

一阶微分锐化的计算公式十分简单,具体如下:

f'(x,y)=\frac{\partial f}{\partial x}+\frac{\partial f}{\partial y}

2.1 单方向一阶锐化

单方向的一阶锐化即是对某特定方向的边缘信息进行增强。通常,我们通过模板来实现,比如:

H=\begin{bmatrix} 1 & 2 & 1\\ 0 & 0&0 \\ -1 &-2 &-1 \end{bmatrix}

代码与处理后图像分别为:(代码中为了增强最后锐化后的效果,采用了垂直方向的锐化,而非上述模板中水平方向的锐化)

import cv2
import numpy as np
import matplotlib.pyplot as pltimage = cv2.imread(r'C:\Users\20349\Desktop\picture\tree.png')# 定义单方向一阶微分锐化模板
kernel = np.array([[1, 0, -1],[2, 0, -2],[1, 0, -1]])# 应用卷积核到图像上
sharpened_image = cv2.filter2D(image, -1, kernel)image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
sharpened_image_rgb = cv2.cvtColor(sharpened_image, cv2.COLOR_BGR2RGB)fig, axes = plt.subplots(1, 2)# 显示原图和处理后的图像
axes[0].imshow(image_rgb)
axes[0].set_title('Original Image')
axes[0].axis('off')  # 不显示坐标轴axes[1].imshow(sharpened_image_rgb)
axes[1].set_title('Sharpened Image')
axes[1].axis('off')  # 不显示坐标轴plt.show()

具体关于实现锐化部分的函数类似地可以写成代码如下:

def filter_2d(image, kernel):# 获取图像和卷积核的尺寸image_height, image_width, *image_channels = image.shapekernel_height, kernel_width = kernel.shape# 确保卷积核是奇数尺寸,以便有中心点if kernel_height % 2 == 0 or kernel_width % 2 == 0:raise ValueError("卷积核的宽高都应该是奇数")# 计算填充大小pad_size_height = kernel_height // 2pad_size_width = kernel_width // 2# 创建一个带有边框填充的图像副本,使用零填充padded_image = cv2.copyMakeBorder(image, pad_size_height, pad_size_height, pad_size_width, pad_size_width,cv2.BORDER_CONSTANT)# 如果图像是彩色图像,则需要分别处理每个通道if len(image_channels) > 0:channels = cv2.split(padded_image)output_channels = []for channel in channels:output_channel = np.zeros_like(channel)# 对于每个像素位置应用卷积for y in range(pad_size_height, image_height + pad_size_height):for x in range(pad_size_width, image_width + pad_size_width):region = channel[y - pad_size_height:y + pad_size_height + 1,x - pad_size_width:x + pad_size_width + 1]output_channel[y - pad_size_height, x - pad_size_width] = (region * kernel).sum()output_channels.append(output_channel)output_image = cv2.merge(output_channels)else:# 对于灰度图像直接处理output_image = np.zeros_like(image)for y in range(pad_size_height, image_height + pad_size_height):for x in range(pad_size_width, image_width + pad_size_width):region = padded_image[y - pad_size_height:y + pad_size_height + 1,x - pad_size_width:x + pad_size_width + 1]output_image[y - pad_size_height, x - pad_size_width] = (region * kernel).sum()return output_image

(该函数代码与实际调用的函数代码略有不同)

此外,在进行了上述步骤后进行取绝对值操作,可以增强对比度,避免负值影响问题等。 

2.2 无方向一阶锐化

通过观察处理结果,我们发现单方向一阶微分锐化对于矩形特征的物体处理效果优秀,但对于不规则的物体处理效果有所欠缺,此时就需要无方向一阶微分锐化。

交叉微分锐化

首先是交叉微分锐化,其表达式为:

g(i,j)=|f(i+1,j+1)-f(i,j)|+|f(i+1,j)-f(i,j+1)|

该方法可以用代码表示为如下,以及其处理结果也如下所示:

def roberts_cross(image):image_height, image_width = image.shapeoutput_image = np.zeros_like(image)# 定义Roberts算子kernel_x = np.array([[1, 0], [0, -1]])kernel_y = np.array([[0, -1], [1, 0]])# 对每个像素应用Roberts算子for y in range(0, image_height - 1):for x in range(0, image_width - 1):region = image[y:y + 2, x:x + 2]gradient_x = (region * kernel_x).sum()gradient_y = (region * kernel_y).sum()output_image[y, x] = np.sqrt(gradient_x ** 2 + gradient_y ** 2)# 归一化output_image = cv2.normalize(output_image, None, 0, 255, cv2.NORM_MINMAX)return output_image.astype(np.uint8)

Sobel锐化

关于Sobel锐化可以用表达式表示为:

g(i,j)=(d^2 _x(i,j)+d^2 _y(i,j))^{\frac{1}{2}}

其中:

d_x =\begin{bmatrix} -1 &0 &1 \\ -2&0 &2 \\ -1&0 &1 \end{bmatrix}        d_y = \begin{bmatrix} -1 & -2 &1 \\ 0&0 &0 \\ 1 &2 &1 \end{bmatrix}

代码以及结果分别为:

def sobel_sharpen(image):image_float = image.astype(float)# 定义Sobel算子kernel_x = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]])kernel_y = np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]])# 计算x方向和y方向的梯度gradient_x = cv2.filter2D(image_float, -1, kernel_x)gradient_y = cv2.filter2D(image_float, -1, kernel_y)# 合并两个方向的梯度gradient_magnitude = np.sqrt(gradient_x ** 2 + gradient_y ** 2)sharpened_image = image_float + gradient_magnitudesharpened_image = np.clip(sharpened_image, 0, 255)return sharpened_image.astype(np.uint8)

Prewitt锐化

如果将刚才的Sobel算法中核进行修改即可得到Prewitt算法,具体Prewitt算法的核为:

d_x =\begin{bmatrix} -1 & 0 &1 \\ -1& 0& 1\\ -1& 0& 1 \end{bmatrix}        d_y = \begin{bmatrix} -1& -1 & -1\\ 0 & 0 &0 \\ 1& 1 &1 \end{bmatrix}

其处理结果为:

三、二阶微分锐化方法

Laplacin算法

关于Laplacin算法的模板为:

H_1 = \begin{bmatrix} 0 & -1 & 0\\ -1 & 4 &-1 \\ 0 & -1 & 0 \end{bmatrix}

这个模板可以通过如下的表达式推导得出:

\triangledown ^2 f = \frac{\partial ^2f}{\partial x^2}+\frac{\partial ^2f}{\partial y^2}

(具体推导过程省略)

那么我们将这个模板用于锐化后得到结果为:

接着,我们为了增强最后Laplacian微分锐化的效果,我们可以对于刚才的模板进行修改,比如:

H_2=\begin{bmatrix} -1 &-1 &-1 \\ -1 & 8 & -1\\ -1 & -1 & -1 \end{bmatrix}

但要注意在修改这个模板时要注意配平,不然会出现问题。

刚才这个模板得到的结果如下:

为了展示效果,这里再提供一个未配平的模板,如下:

 H_2=\begin{bmatrix} -1 &-1 &-1 \\ -1 & 9 & -1\\ -1 & -1 & -1 \end{bmatrix}

运用这个模板处理后的结果如下:(可以发现这个处理结果十分接近原图)

Wallis算法

如果对于刚才的这些模板中加入对数的处理,就可以得到Wallis算法,这种算法更接近人眼的视觉特性,得到的结果在暗区也可以很好处理,下面是一个模板举例:

H_2=\begin{bmatrix} -\frac{1}{8} &-\frac{1}{8} &-\frac{1}{8} \\-\frac{1}{8}& 1 & -\frac{1}{8}\\ -\frac{1}{8}& -\frac{1}{8} & -\frac{1}{8} \end{bmatrix}

处理结果如下:

 此上

相关文章:

关于图像锐化的一份介绍

在这篇文章中,我将介绍有关图像锐化有关的知识,具体包括锐化的简单介绍、一阶锐化与二阶锐化等方面内容。 一、锐化 1.1 概念 锐化(sharpening)就是指将图象中灰度差增大的方法,一次来增强物体的轮廓与边缘。因为发…...

Django开发入门 – 0.Django基本介绍

Django开发入门 – 0.Django基本介绍 A Brief Introduction to django By JacksonML 1. Django简介 1) 什么是Django? 依据其官网的一段解释: Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design. …...

多智能体协作架构模式:驱动传统公司向AI智能公司转型

前言 在数字化浪潮的席卷下,传统公司的运营模式正面临着前所未有的挑战。随着市场竞争的日益激烈,客户需求的快速变化以及业务复杂度的不断攀升,传统公司在缺乏 AI 技术支撑的情况下,暴露出诸多痛点。在决策层面,由于…...

CentOS服务器部署Docker+Jenkins持续集成环境

一、准备工作 一台运行 CentOS 的服务器,确保有足够的磁盘空间、内存资源,并且网络连接稳定。建议使用 CentOS 7 或更高版本,本文以 CentOS 7 为例进行讲解。 拥有服务器的 root 权限,因为后续安装软件包、配置环境等操作需要较…...

【prompt实战】AI +OCR技术结合ChatGPT能力项目实践(BOL提单识别提取专家)

本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 1. 需求背景 2. 目标 3. BOL通用处理逻辑…...

【Android】Android开发应用如何开启任务栏消息通知

Android开发应用如何开启任务栏消息通知 1. 获取通知权限2.编写通知工具类3. 进行任务栏消息通知 1. 获取通知权限 在 AndroidManifest.xml 里加上权限配置&#xff0c;如下。 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android…...

上传文件报错:the request was rejected because no multipart boundary was found

后端使用的springboot的MultipartFile上传文件&#xff0c;接口使用apifox调试过没有问题&#xff0c;但前端调接口报错。前端使用了fetch发送formData数据。 the request was rejected because no multipart boundary was found 前端使用的请求头是 multipart/form-data 没有…...

大模型—Dify本地化部署实战

Dify本地化部署实战 系统要求 安装 Dify 之前, 请确保你的机器已满足最低安装要求: CPU >= 2 CoreRAM >= 4 GiB本地部署 开始前先简单介绍下部署Dify需要用到的组件,稍微有点多,但放心,有Docker你怕啥? 关系数据库:postgres缓存:Redis向量数据库:支持weaviate…...

功能架构元模型

功能架构的元模型是对功能架构进行描述和建模的基础框架,它有助于统一不同团队对系统的理解,并为系统的设计和开发提供一致的标准和规范。虽然具体的元模型可能因不同的应用领域和特定需求而有所差异,但一般来说,功能架构的元模型可以涵盖以下几个方面: 组件/模块元模型:…...

常用工具类——Collections集合框架

常用工具类——Collections集合框架 Collections 是 JDK 提供的一个工具类&#xff0c;提供了一系列静态方法&#xff0c;分类来复习&#xff01; 1.排序操作 reverse(List list) :反转顺序shuffle(List list) &#xff1a; 洗牌&#xff0c;将顺序打乱sort(List list) &…...

e2studio开发RA2E1(9)----定时器GPT配置输入捕获

e2studio开发RA2E1.9--定时器GPT配置输入捕获 概述视频教学样品申请硬件准备参考程序源码下载选择计时器时钟源UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_uart_callback ()printf输出重定向到串口定时器输入捕获配…...

25/2/7 <机器人基础>雅可比矩阵计算 雅可比伪逆

雅可比矩阵计算 雅可比矩阵的定义 假设我们有一个简单的两个关节的平面机器人臂&#xff0c;其末端执行器的位置可以表示为&#xff1a; 其中&#xff1a; L1​ 和 L2 是机器人臂的长度。θ1​ 和 θ2是关节的角度。 计算雅可比矩阵 雅可比矩阵 JJ 的定义是将关节速度与末…...

网络爬虫js逆向之异步栈跟栈案例

【注意&#xff01;&#xff01;&#xff01;】 前言&#xff1a; 1. 本章主要讲解js逆向之异步栈跟栈的知识&#xff08;通过单步执行调试&#xff09; 2. 使用关键字搜定位加密入口 3. 本专栏通过多篇文章【文字案例】的形式系统化进行描述 4. 本文章全文进行了脱敏处理 5. 详…...

使用Ollama本地部署deepseek

1、下载安装Ollama 前往下载页面 https://ollama.com/download下载好安装包&#xff0c;如同安装软件一样&#xff0c;直接安装即可 win中默认为C盘&#xff0c;如果需要修改到其他盘&#xff0c;查找具体教程 运行list命令&#xff0c;检查是否安装成功 2、修改模型下载的…...

Rust错误处理:从灭火器到核按钮的生存指南

开篇&#xff1a;错误处理的生存哲学 在Rust的平行宇宙里&#xff0c;错误分为两种人格&#xff1a; panic! → 核按钮&#x1f4a3;&#xff08;不可恢复&#xff0c;全系统警报&#xff09;Result → 灭火器&#x1f9ef;&#xff08;可控制&#xff0c;局部处理&#xff0…...

Golang:Go 1.23 版本新特性介绍

流行的编程语言Go已经发布了1.23版本&#xff0c;带来了许多改进、优化和新特性。在Go 1.22发布六个月后&#xff0c;这次更新增强了工具链、运行时和库&#xff0c;同时保持了向后兼容性。 Go 1.23 的新增特性主要包括语言特性、工具链改进、标准库更新等方面&#xff0c;以下…...

电脑运行黑屏是什么原因?原因及解决方法

电脑运行黑屏是指电脑在正常开机或使用过程中&#xff0c;突然出现屏幕变黑&#xff0c;无法显示任何内容的现象。这种现象可能会给用户带来很多不便&#xff0c;甚至造成数据丢失或硬件损坏。那么&#xff0c;电脑运行黑屏是什么原因呢&#xff1f;下面我们将分析几种可能的原…...

redis之AOF持久化过程

流程图 在redis.conf文件中配置appendonly为yes则开启aof持久化机制 #开启aof持久化&#xff0c;默认关闭为no appendonly no也可以在命令行开启 aof刷盘策略 #每个写操作都会同步刷盘。 appendfsync always #执行命令后先放入aof缓冲区&#xff0c;每秒钟将缓冲区数据刷盘…...

Elasticsearch:向量搜索的快速介绍

作者&#xff1a;来自 Elastic Valentin Crettaz 本文是三篇系列文章中的第一篇&#xff0c;将深入探讨向量搜索&#xff08;也称为语义搜索&#xff09;的复杂性&#xff0c;以及它在 Elasticsearch 中的实现方式。 本文是三篇系列文章中的第一篇&#xff0c;将深入探讨向量搜…...

Docker在安装时遇到的问题(第一部分)

一、在用docker-config-manager安装yum源时出现错误 [rootlocalhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 已加载插件&#xff1a;fastestmirror, langpacks adding repo from: https://download.docker.com/linux/ce…...

Wan2.2-I2V-A14B开源大模型教程:模型权重结构解析与LoRA微调入门

Wan2.2-I2V-A14B开源大模型教程&#xff1a;模型权重结构解析与LoRA微调入门 1. 模型概述与环境准备 Wan2.2-I2V-A14B是一款先进的文生视频开源大模型&#xff0c;能够根据文本描述生成高质量视频内容。本教程将深入解析模型权重结构&#xff0c;并指导您完成LoRA微调入门实践…...

ChatTTS社区生态:GitHub项目活跃度与更新频率观察

ChatTTS社区生态&#xff1a;GitHub项目活跃度与更新频率观察 1. 项目概述与核心价值 ChatTTS作为目前开源语音合成领域的明星项目&#xff0c;以其卓越的拟真度和自然度赢得了广泛关注。这个专门针对中文对话优化的语音合成模型&#xff0c;能够自动生成极其自然的停顿、换气…...

2026生成式引擎优化(GEO)深度实测报告:基于Hakuna Matata平台的五大主流大模型对抗性测试全景分析

摘要&#xff1a;本文以“Hakuna Matata”测试平台为基准场&#xff0c;针对百度文心一言、Moonshot AI&#xff08;Kimi&#xff09;、腾讯元宝、阿里千问、字节豆包五大国内主流生成式AI平台&#xff0c;开展了一场史无前例的生成式引擎优化&#xff08;GEO&#xff09;对抗性…...

手把手教你用PLECS画波德图:从AC Sweep设置到看懂相位裕度,避坑指南

从零开始掌握PLECS波德图分析&#xff1a;工程师必备的频域诊断手册 第一次在PLECS里点击"AC Sweep"按钮时&#xff0c;我盯着满屏的参数选项发呆了十分钟。作为电力电子工程师&#xff0c;我们总说"看波德图就像看电路的体检报告"&#xff0c;但当你真正面…...

不止于安装:将Helowin Oracle 11g Docker镜像改造为可持续使用的开发数据库

从临时容器到生产级服务&#xff1a;Helowin Oracle 11g Docker镜像深度定制指南 当开发团队决定采用Docker化的Oracle数据库作为开发测试环境时&#xff0c;往往会遇到一个尴尬的现实&#xff1a;大多数现成镜像要么过于臃肿&#xff0c;要么配置不符合项目规范。Helowin的Ora…...

一键召唤AI画师!次元画室让角色设计变得如此简单

一键召唤AI画师&#xff01;次元画室让角色设计变得如此简单 你是否曾经有过这样的经历&#xff1f;脑海中浮现出一个绝妙的角色形象&#xff0c;却苦于无法将它完美呈现&#xff1b;或者为了设计游戏角色&#xff0c;不得不花费重金聘请专业画师&#xff1b;又或者作为小说作…...

从会议录音到字幕生成:基于FunASR和SpringBoot搭建一个轻量级语音处理中台

从会议录音到字幕生成&#xff1a;基于FunASR和SpringBoot搭建轻量级语音处理中台 每周例会后&#xff0c;行政小张总要花两小时反复听录音整理纪要。市场部的跨国会议录音&#xff0c;技术团队的头脑风暴存档&#xff0c;管理层战略讨论的逐字记录——这些音频文件堆积在共享…...

Qwen-Image-2512实现Python爬虫数据自动化处理:电商图片批量生成方案

Qwen-Image-2512实现Python爬虫数据自动化处理&#xff1a;电商图片批量生成方案 1. 引言 如果你是做电商的&#xff0c;或者负责过电商运营&#xff0c;肯定遇到过这个头疼的问题&#xff1a;上架一个新商品&#xff0c;或者给一批老商品换季上新&#xff0c;需要准备大量的…...

放弃OpenVINO!在树莓派5上用Anaconda环境直接跑通YOLOv5摄像头检测

放弃OpenVINO&#xff01;在树莓派5上用Anaconda环境直接跑通YOLOv5摄像头检测 树莓派作为嵌入式开发的明星产品&#xff0c;其第五代在性能上有了显著提升&#xff0c;4GB内存和2.4GHz四核处理器让它能够胜任更多AI推理任务。而YOLOv5作为目标检测领域的轻量级标杆&#xff0c…...

腾讯优图视觉模型应用:Youtu-VL-4B-Instruct在内容审核中的实战

腾讯优图视觉模型应用&#xff1a;Youtu-VL-4B-Instruct在内容审核中的实战 每天&#xff0c;互联网上会产生数十亿张图片和视频。对于内容平台来说&#xff0c;如何确保这些内容安全合规&#xff0c;同时控制审核成本&#xff0c;一直是个头疼的问题。传统的人工审核效率低、…...