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

【机器视觉】一文掌握常见图像增强算法。

图像增强算法

  • 1、引言
  • 2、图像增强概述
    • 2.1 定义
    • 2.2 分类体系
  • 3、常见图像增强算法
    • 3.1 直方图均衡化
      • 3.1.1 定义
      • 3.1.2 算法原理
      • 3.1.3 代码示例
    • 3.2 伽马校正
      • 3.2.1 定义
      • 3.2.2 算法原理
      • 3.2.3 代码示例
    • 3.3 高斯滤波
      • 3.3.1 定义
      • 3.3.2 算法原理
      • 3.3.3 代码示例
    • 3.4 同态滤波
      • 3.4.1 定义
      • 3.4.2 算法原理
      • 3.4.3 代码示例
    • 3.5 中值滤波
      • 3.5.1 定义
      • 3.5.2 算法原理
      • 3.5.3 代码示例
    • 3.6 拉普拉斯锐化
      • 3.6.1 定义
      • 3.6.2 算法原理
      • 3.6.3 代码示例
  • 4、算法性能比较
  • 5、总结

1、引言

小屌丝:鱼哥,你可算是回来了
小鱼:时间如梭啊~
小屌丝:听你这意思,是不想回来?
小鱼:那倒没有,哪里都不如自己的国家啊。
小屌丝:这话说得带劲
小鱼:这也是我们国家给我们的自豪感。
小屌丝:你说的是这个么?
在这里插入图片描述

小鱼:看来,你也是关注咱的军事动态啊。
小屌丝:那我的夸夸你啊, 在国外,也关注国家的军事动态
小鱼:这得夸"咱妈"啊: 福建舰入列,H2O也快入列…
小屌丝:呱唧呱唧
小鱼:你看天也冷了,咱边泡澡,边聊?
小屌丝:不急,我有一个问题。
小鱼:打住,你是不是想问 图像算法的是?
小屌丝:呦呵~ 鱼哥,你这又神啊,咋知道的?
小鱼:边泡澡边聊
小屌丝:行啊~

2、图像增强概述

2.1 定义

图像增强是指通过一系列技术手段改善图像视觉效果或将图像转换成更适合人或机器分析处理的形式的技术过程。其主要目标包括:

  • 改善图像的主观视觉质量
  • 突出图像中的特定信息
  • 抑制不希望的噪声或失真
  • 增强图像中的某些特征以供后续处理

2.2 分类体系

根据处理域的不同,图像增强算法可分为以下几大类:

图像增强算法
├── 空间域增强
│   ├── 点运算
│   │   ├── 灰度变换
│   │   ├── 直方图处理
│   │   └── 对比度增强
│   └── 邻域运算
│       ├── 平滑滤波
│       └── 锐化滤波
├── 频率域增强
│   ├── 低通滤波
│   ├── 高通滤波
│   └── 同态滤波
└── 彩色图像增强├── 伪彩色增强└── 真彩色增强

3、常见图像增强算法

3.1 直方图均衡化

3.1.1 定义

直方图均衡化是一种通过重新分布图像像素强度值来增强图像对比度的技术。
它将输入图像的直方图变换为在整个强度范围内均匀分布的直方图。

3.1.2 算法原理

对于离散图像,直方图均衡化的变换函数为:

sk=T(rk)=∑j=0knjns_k = T(r_k) = \sum_{j=0}^{k} \frac{n_j}{n}sk=T(rk)=j=0knnj

其中 rkr_krk 是输入强度级,sks_ksk 是输出强度级,njn_jnj 是强度级 rjr_jrj 的像素数,nnn 是总像素数。

3.1.3 代码示例

import cv2
import numpy as np
import matplotlib.pyplot as pltdef histogram_equalization_demo():# 读取图像img = cv2.imread('input.jpg', 0)  # 以灰度模式读取# 直方图均衡化equ = cv2.equalizeHist(img)# 显示原图和结果plt.figure(figsize=(12, 6))plt.subplot(2, 2, 1)plt.imshow(img, cmap='gray')plt.title('Original Image')plt.axis('off')plt.subplot(2, 2, 2)plt.imshow(equ, cmap='gray')plt.title('Equalized Image')plt.axis('off')plt.subplot(2, 2, 3)plt.hist(img.flatten(), 256, [0, 256], color='r')plt.title('Original Histogram')plt.xlim([0, 256])plt.subplot(2, 2, 4)plt.hist(equ.flatten(), 256, [0, 256], color='b')plt.title('Equalized Histogram')plt.xlim([0, 256])plt.tight_layout()plt.show()# 执行示例
histogram_equalization_demo()

3.2 伽马校正

3.2.1 定义

伽马校正是一种非线性操作,用于校正图像的亮度响应。
它通过幂律变换调整图像的像素强度

3.2.2 算法原理

Vout=A⋅VinγV_{out} = A \cdot V_{in}^{\gamma}Vout=AVinγ

其中 VinV_{in}Vin 是输入像素值,VoutV_{out}Vout 是输出像素值,AAA 是常数(通常为1),γ\gammaγ 是伽马值。

3.2.3 代码示例

def gamma_correction_demo():# 读取图像img = cv2.imread('input.jpg')img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# 定义伽马值gamma_values = [0.5, 1.0, 1.5, 2.0]plt.figure(figsize=(15, 10))for i, gamma in enumerate(gamma_values):# 应用伽马校正inv_gamma = 1.0 / gammatable = np.array([((j / 255.0) ** inv_gamma) * 255 for j in np.arange(0, 256)]).astype("uint8")corrected = cv2.LUT(img, table)plt.subplot(2, 2, i+1)plt.imshow(corrected)plt.title(f'Gamma Correction (γ={gamma})')plt.axis('off')plt.tight_layout()plt.show()# 执行示例
gamma_correction_demo()

3.3 高斯滤波

3.3.1 定义

高斯滤波是一种线性平滑滤波器,使用高斯函数作为卷积核,能有效去除高斯噪声并保留图像边缘信息。

3.3.2 算法原理

G(x,y)=12πσ2e−x2+y22σ2G(x,y) = \frac{1}{2\pi\sigma^2} e^{-\frac{x^2+y^2}{2\sigma^2}}G(x,y)=2πσ21e2σ2x2+y2

其中 σ\sigmaσ 是标准差,控制平滑程度

3.3.3 代码示例

def gaussian_filter_demo():# 读取图像并添加高斯噪声img = cv2.imread('input.jpg', 0)# 添加高斯噪声noise = np.random.normal(0, 25, img.shape).astype(np.uint8)noisy_img = cv2.add(img, noise)# 应用不同大小的高斯滤波器kernel_sizes = [3, 5, 7, 9]plt.figure(figsize=(15, 10))plt.subplot(2, 3, 1)plt.imshow(img, cmap='gray')plt.title('Original Image')plt.axis('off')plt.subplot(2, 3, 2)plt.imshow(noisy_img, cmap='gray')plt.title('Noisy Image')plt.axis('off')for i, ksize in enumerate(kernel_sizes):# 应用高斯滤波blurred = cv2.GaussianBlur(noisy_img, (ksize, ksize), 0)plt.subplot(2, 3, i+3)plt.imshow(blurred, cmap='gray')plt.title(f'Gaussian Filter (size={ksize})')plt.axis('off')plt.tight_layout()plt.show()# 执行示例
gaussian_filter_demo()

3.4 同态滤波

3.4.1 定义

同态滤波是一种在频率域中同时压缩亮度范围和增强对比度的方法,特别适用于处理光照不均匀的图像。

3.4.2 算法原理

同态滤波基于图像的照射-反射模型:
f(x,y)=i(x,y)⋅r(x,y)f(x,y)=i(x,y)⋅r(x,y)f(x,y) = i(x,y) \cdot r(x,y)f(x,y)=i(x,y)⋅r(x,y)f(x,y)=i(x,y)r(x,y)f(x,y)=i(x,y)r(x,y)

通过对数变换将乘法关系转换为加法关系,在频率域进行滤波,最后通过指数变换恢复图像。

3.4.3 代码示例

def homomorphic_filter_demo():# 读取图像img = cv2.imread('input.jpg', 0)img = np.float32(img) / 255.0# 同态滤波参数gamma_l = 0.5  # 低频增益gamma_h = 2.0  # 高频增益c = 1.0        # 锐化常数d0 = 10        # 截止频率# 获取图像尺寸rows, cols = img.shapecrow, ccol = rows // 2, cols // 2# 创建同态滤波器u, v = np.meshgrid(np.arange(cols) - ccol, np.arange(rows) - crow)d = np.sqrt(u**2 + v**2)h = (gamma_h - gamma_l) * (1 - np.exp(-c * (d**2 / d0**2))) + gamma_l# 应用同态滤波img_log = np.log(img + 1e-6)  # 避免log(0)img_fft = np.fft.fft2(img_log)img_fft_shift = np.fft.fftshift(img_fft)# 频域滤波filtered_fft = img_fft_shift * h# 逆变换filtered_fft_ishift = np.fft.ifftshift(filtered_fft)filtered_img = np.fft.ifft2(filtered_fft_ishift)filtered_img = np.real(filtered_img)# 指数变换result = np.exp(filtered_img)result = np.uint8(np.clip(result * 255, 0, 255))plt.figure(figsize=(12, 6))plt.subplot(1, 2, 1)plt.imshow(np.uint8(img * 255), cmap='gray')plt.title('Original Image')plt.axis('off')plt.subplot(1, 2, 2)plt.imshow(result, cmap='gray')plt.title('Homomorphic Filtered Image')plt.axis('off')plt.tight_layout()plt.show()# 执行示例
homomorphic_filter_demo()

3.5 中值滤波

3.5.1 定义

中值滤波是一种非线性滤波技术,用像素邻域的中值代替该像素值,能有效去除椒盐噪声同时保护图像边缘。

3.5.2 算法原理

3.5.3 代码示例

def median_filter_demo():# 读取图像并添加椒盐噪声img = cv2.imread('input.jpg', 0)# 添加椒盐噪声noisy_img = img.copy()salt_pepper_prob = 0.05# 添加盐噪声salt_mask = np.random.random(img.shape) < salt_pepper_prob/2noisy_img[salt_mask] = 255# 添加椒噪声pepper_mask = np.random.random(img.shape) < salt_pepper_prob/2noisy_img[pepper_mask] = 0# 应用中值滤波kernel_sizes = [3, 5, 7]plt.figure(figsize=(12, 8))plt.subplot(2, 2, 1)plt.imshow(img, cmap='gray')plt.title('Original Image')plt.axis('off')plt.subplot(2, 2, 2)plt.imshow(noisy_img, cmap='gray')plt.title('Noisy Image (Salt & Pepper)')plt.axis('off')for i, ksize in enumerate(kernel_sizes):# 应用中值滤波filtered = cv2.medianBlur(noisy_img, ksize)plt.subplot(2, 2, i+3)plt.imshow(filtered, cmap='gray')plt.title(f'Median Filter (size={ksize})')plt.axis('off')plt.tight_layout()plt.show()# 执行示例
median_filter_demo()

在这里插入图片描述

在这里插入图片描述

3.6 拉普拉斯锐化

3.6.1 定义

拉普拉斯锐化是一种基于二阶导数的图像增强技术,通过增强图像中的灰度突变来突出边缘和细节。

3.6.2 算法原理

∇2f=∂2f∂x2+∂2f∂y2\nabla^2 f = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2}2f=x22f+y22f
离散形式的拉普拉斯算子常用卷积核表示,如:

[0−10−14−10−10]\begin{bmatrix} 0 & -1 & 0 \\ -1 & 4 & -1 \\ 0 & -1 & 0 \end{bmatrix}010141010

3.6.3 代码示例

def laplacian_sharpening_demo():# 读取图像img = cv2.imread('input.jpg', 0)# 应用高斯模糊模拟平滑图像blurred = cv2.GaussianBlur(img, (5, 5), 0)# 拉普拉斯锐化laplacian = cv2.Laplacian(blurred, cv2.CV_64F)# 将拉普拉斯结果转换为8位图像laplacian_abs = cv2.convertScaleAbs(laplacian)# 将原图与拉普拉斯结果相加实现锐化sharpened = cv2.addWeighted(img, 1.5, laplacian_abs, -0.5, 0)plt.figure(figsize=(15, 5))plt.subplot(1, 3, 1)plt.imshow(img, cmap='gray')plt.title('Original Image')plt.axis('off')plt.subplot(1, 3, 2)plt.imshow(laplacian_abs, cmap='gray')plt.title('Laplacian Filter Result')plt.axis('off')plt.subplot(1, 3, 3)plt.imshow(sharpened, cmap='gray')plt.title('Sharpened Image')plt.axis('off')plt.tight_layout()plt.show()# 执行示例
laplacian_sharpening_demo()

4、算法性能比较

算法优点缺点适用场景
直方图均衡化简单有效,显著增强对比度可能过度增强噪声
伽马校正灵活调整亮度,计算简单需要手动调整参数光照校正
高斯滤波有效去除高斯噪声,保持边缘可能模糊细节一般性去噪
中值滤波有效去除椒盐噪声,保护边缘对高斯噪声效果一般脉冲噪声去除
拉普拉斯锐化突出边缘和细节增强噪声边缘增强
同态滤波同时处理亮度和对比度计算复杂非均匀光照

5、总结

看到这里,常见图像增强算法就差不多聊完了。
最后再唠叨一句:在实际项目中,建议根据具体需求、资源约束和性能要求,在传统方法和深度学习方法之间做出合适的选择。

我是小鱼

  • CSDN 博客专家
  • AIGC 技术MVP专家
  • 阿里云 专家博主
  • 51CTO博客专家
  • 企业认证金牌面试官
  • 多个名企认证&特邀讲师等
  • 名企签约职场面试培训、职场规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)评测一等奖获得者

关注小鱼,学习【机器视觉与目标检测】最新最全的领域知识。

http://www.dtcms.com/a/613734.html

相关文章:

  • 新能源激光焊接工作站西门子1500系列PLC通过Profinet转CANopen智能网关和机器人进行通讯案例
  • 成品网站w灬源码火龙果企业网站seo怎么做
  • 前端最佳实践
  • 潍坊网站设计深圳设计公司办公室装修设计
  • excel设置下拉框选项?【图文详解】excel怎么设置下拉框选项?数据验证?下拉框选项格式?
  • 大语言模型四大核心技术架构深度解析
  • 图片分类展示网站源码有哪个网站可以做链接
  • 辽宁城乡建设网站优惠券网站怎么搭建
  • 2025.11.14 力扣每日一题
  • LDO输出电容、磁珠导致的纹波异常以及ADC有效位测量学习
  • 典型的 ROS 2 ament_cmake构建CMake脚本中ament相关指令解释
  • 【高级机器学习】 14. 多任务学习
  • 函数式接口+default接口+springAi 中的ducumentReader去理解为什么存在default接口的形式
  • 购物网站备案水友做的yyf网站
  • 专业建网站设计公司潍坊建设网站公司
  • linux之ubuntu qt界面开发开发点菜系统
  • 海东市公司网站建设介绍自己的家乡遵义网站建设
  • GitHub 热榜项目 - 日榜(2025-11-15)
  • 测开学习DAY29
  • 2.常用软件记录汇总
  • L2 RLC层介绍:架构、数据封装与模式
  • 长沙网站建设 网站设计安全的合肥网站建设
  • 凡科做网站行吗专业网站推广优化
  • 物联网控制|计算机控制-刘川来胡乃平版|第4章:过程通道与人机接口-4.4Human-Machine Interface|课堂笔记|
  • 请求签名(Request Signature)
  • 从零开始构建企业级物联网平台:IoTSharp 架构设计与实践全解析
  • FFmpeg解码音频数据AudioTrack/OpenSL播放
  • 怎么做英文网站wordpress go跳转页面
  • 下载 asp网站手工制作衣服童装环保
  • 重估百度,也是在重估 AI 的未来