Python实现图像增强

 更新时间:2022年08月05日 09:59:28   作者:lph-China  
这篇文章主要为大家详细介绍了Python实现图像增强,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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使用PyMySql增删改查Mysql数据库的实现

    Python使用PyMySql增删改查Mysql数据库的实现

    PyMysql是Python中用于连接MySQL数据库的一个第三方库,本文主要介绍了Python使用PyMySql增删改查Mysql数据库的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • python爬虫之基金信息存储

    python爬虫之基金信息存储

    这篇文章主要介绍了python爬虫之基金信息存储,前面已经讲了很多次要进行数据存储,终于在上一篇中完成了数据库的设,在这篇文章我们就来完成数据存储操作部分的介绍,需要的朋友可以参考一下
    2022-05-05
  • Python开发如何在ubuntu 15.10 上配置vim

    Python开发如何在ubuntu 15.10 上配置vim

    这篇文章主要介绍了Python开发如何在ubuntu 15.10 上配置vim 的相关资料,需要的朋友可以参考下
    2016-01-01
  • 使用Python的xlwings操作Excel的属性和方法

    使用Python的xlwings操作Excel的属性和方法

    这篇文章主要介绍了使用Python的xlwings操作Excel的属性和方法,xlwings 是 Python 操作 Excel 的库之一,主要作为两门语言的交互工具,是python 操作excel比较成熟、杰出的库,调用简单方便,而且功能强大,需要的朋友可以参考下
    2023-07-07
  • Python中装饰器的一个妙用

    Python中装饰器的一个妙用

    这篇文章主要介绍了Python中装饰器的一个妙用,本文是在写一个爬虫程序时总结而来,实现定义一个装饰器,如果之前取到数据,就直接取cache的数据,如果之前没有取到,那么就从网站拉取,并且存入cache中,需要的朋友可以参考下
    2015-02-02
  • 使用Python的Twisted框架编写非阻塞程序的代码示例

    使用Python的Twisted框架编写非阻塞程序的代码示例

    Twisted是基于异步模式的开发框架,因而利用Twisted进行非阻塞编程自然也是必会的用法,下面我们就来一起看一下使用Python的Twisted框架编写非阻塞程序的代码示例:
    2016-05-05
  • Pytorch中如何调用forward()函数

    Pytorch中如何调用forward()函数

    这篇文章主要介绍了Pytorch中如何调用forward()函数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python学习之基础语法介绍

    Python学习之基础语法介绍

    大家好,本篇文章主要讲的是Python学习之基础语法介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • python掌握字符串只需这一篇就够了

    python掌握字符串只需这一篇就够了

    字符串是 Python 中最常用的数据类型。我们可以使用引号('或")来创建字符串。创建字符串很简单,只要为变量分配一个值即可
    2021-11-11
  • OpenCV实战之AI照片背景替换

    OpenCV实战之AI照片背景替换

    不少人在生活中都有抠人像图换背景的需求。本文将为大家介绍一个更快的方法,即利用OpenCV实现AI照片背景替换,感兴趣的小伙伴可以试一试
    2022-01-01

最新评论