Python实现图像增强:从去噪到对比度提升的完整流程

陆景行
陆景行
发布时间:2026-10-15| 5人浏览过
原创

本文详细介绍利用Python进行图像增强的多种技术手段,重点解析中值滤波去除椒盐噪声、Gamma校正调整亮度以及对比度提升的具体实现。通过结合OpenCV与scikit-image库,展示从原始图像读取、多步处理到最终效果对比的完整代码流程,帮助开发者掌握改善图像视觉质量的核心方法。

本文通过具体代码实例,展示如何使用Python进行图像增强处理,供读者参考学习。

针对给定的原始图像(见图1),探讨可行的图像增强手段以改善视觉效果,并展示处理后的结果及简要流程说明。

图1 原始图像

常见的图像增强技术主要包括以下几种:

1. 对比度提升

该方法利用线性函数对图像灰度值进行变换,以增强图像细节。

2. Gamma校正

此方法采用非线性函数(指数函数)对灰度值进行变换,常用于调整图像亮度。

3. 直方图均衡化

通过积分概率密度函数将原始图像直方图转化为概率密度为1的理想状态,从而提升对比度。其实质是特定区域的展宽,但可能导致整体图像向亮区偏移。对于给定原始图像,其均衡化效果是确定的。

4. 直方图规定化

为解决直方图均衡化的局限性,将原始图像直方图转化为指定的目标直方图形式。通常需参考原始图像直方图,并利用多高斯函数构建目标直方图。

5. 中值与均值滤波器

均值滤波:选取当前像素的邻近像素组成模板,用模板内像素的平均值替换原像素值。

中值滤波:选取当前像素的邻近像素组成模板,将模板内像素排序后,用中值替换原像素值。

观察图像可知,原图存在较多椒盐噪声且整体偏暗。因此,选用中值滤波处理噪声(其对椒盐噪声效果显著),并同步提升对比度与亮度。

处理流程如下:

第一步:应用中值滤波处理图像,结果见图2。

图2 中值滤波处理结果

第二步:进行Gamma校正,结果见图3。

图3 Gamma校正处理结果

第三步:提升对比度与亮度,结果见图4。

图4 对比度与亮度提升结果

最后输出处理前后的对比图,见图5。

图5 效果对比图

Python实现代码如下:

#author:lph
#funtion:image enhance
 
import cv2
import numpy as np
from tkinter import *
from skimage import filters,exposure
import matplotlib.pyplot as plt
from skimage.morphology import disk
from matplotlib.font_manager import FontProperties
#读入图片
im = cv2.imread('./image/image.png',0)
im_copy = cv2.imread('./image/image.png',0)
#如果图片为空,返回错误信息,并终止程序
if im is None:
    print("图片打开失败!")
    exit()
#中值滤波去噪
medStep = 3 # 设置为3*3的滤波器
def m_filter(x, y, step):
    """中值滤波函数"""
    sum_s=[] # 定义空数组
    for k in range(-int(step/2),int(step/2)+1):
        for m in range(-int(step/2),int(step/2)+1):
            sum_s.append(im[x+k][y+m]) # 把模块的像素添加到空数组
    sum_s.sort() # 对模板的像素由小到大进行排序
    return sum_s[(int(step*step/2)+1)]
for i in range(int(medStep/2),im.shape[0]-int(medStep/2)):
    for j in range(int(medStep/2),im.shape[1]-int(medStep/2)):
        im_copy[i][j] = m_filter(i, j, medStep) # 用模板的中值来替代原像素的值
cv2.imshow("Median",im_copy)
#Gamma校正
img3 = exposure.adjust_gamma(im_copy,1.05)
cv2.imshow("Gamma", img3)
#对比度、亮度增强
def Contrast_and_Brightness(alpha,beta,img):
    """使用公式f(x)=α.g(x)+β"""
    #α调节对比度,β调节亮度
    blank = np.zeros(img.shape,img.dtype)#创建图片类型的零矩阵
    dst = cv2.addWeighted(img,alpha,blank,1-alpha,beta)#图像混合加权
    return dst
img4 = Contrast_and_Brightness(1.1,30,img3)
cv2.imshow("Contrast", img4)
#创建一个窗口
plt.figure('对比图',figsize=(7,5))
# 中文字体设置
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14) #新宋体
#显示原图
plt.subplot(121) #子图1
#显示原图,设置标题和字体
plt.imshow(im,plt.cm.gray), plt.title('处理前图片', fontproperties = font)
 
#显示处理过的图像
plt.subplot(122) #子图2
#显示处理后的图,设置标题和字体
plt.imshow(img4,plt.cm.gray), plt.title('处理后图片', fontproperties = font)
plt.show()
# 销毁所有窗口
cv2.destroyAllWindows()

以上为本文全部内容,希望能为读者提供有益参考。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。