Python实现图像增强
作者:lph-China 发布时间:2022-07-08 10:50:50
本文实例为大家分享了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()
来源:https://blog.csdn.net/lph188/article/details/84538103
猜你喜欢
- 一个随机排列元素的方法, 其实之前是在摄影页面写的一个小效果.查看演示: 点此查看DEMO实现方法利用Math.random()产生随机数,
- 以SQL Server中的Northwind示范数据库为例,利用DTS设计器,进行数据的转移。转移任务的步骤:◆1. 新建目的数据库NOrt
- 安装SDK:pip install baidu-aip如果在pycharm里也可以在setting----Project Interpret
- 通常,在完成了一件网页设计后,设计师的无知都会显露无遗而备受指责。他们把创建网页代码的繁重工作都留给了程序员们。这种现象不只出现在网络开发行
- 举例: 340%60 = 40 ,怎么来的?340 - 60*5 = 40340 - (比340小的那个可以被60整除的正整数) =. 40
- 1 python装饰器的作用被装饰对象加上装饰器(戴了个帽子),被装饰对象获得了更强大的功能。2 python装饰器的原理python装饰器
- 我想大家在用Sql2005一般都是.NET2005自带的SQL Server 2005是SQL Server2005 Express版本的,
- 引言您是否能编写命令行工具?也许您可以,但您能编写出真正好用的命令行工具吗?本文讨论使用 Python 来创建一个强健的命令行工具,并带有内
- <div id="d1"></div> <script > fu
- 当你链接到应用程序以使用MySQL客户端库时,可能会遇到以mysql_开始的未定义引用错误,如下所示:/tmp/ccFKsdPa.o: 在函
- 这是一篇知识性的文档,主要目的是为了让Web缓存相关概念更容易被开发者理解并应用于实际的应用环境中。为了简要起见,某些实现方面的细节被简化或
- 一、 软件介绍 DB2MYSQL是一个可以自动将ACCESS数据库文件转化为对应的SQL代码的软件。可广泛应用于ACCESS数据库转换为MY
- 现在电子商务网站的设计,正面临着一系列的挑战,其中最主要的挑战是:我们尝试建立一种用户体验,来提高用户在线购物的可能性。为了对抗网上激烈的竞
- 环境准备 python3.52 pycharm5.05 Pillow 自制的验证码工具包/utils/check_code 验证码的作用防恶
- SQL*DBA命令的安全性: 如果您没有SQL*PLUS应用程序,您也可以使用SQL*DBA作SQL查权限相关的命令只能分配给Oracle软
- 这几天在做一个数据集,由于不是很熟悉Linux下的命令,所以特地用了强大的python来做。我之前有一个数据集但是我只要里面名称带有comp
- 下面是模板的一般形式,显示了指定 SQL 查询和 XPath 查询的方式: <ROOT xmlns:sql="ur
- 最近在老家找工作,无奈老家工作真心太少,也没什么面试机会,不过之前面试一家公司,提了一个有意思的需求,检测河面没有有什么船只之类的物体,我当
- 1、安装coveragepip install coverage安装完成后,会在Python环境下的\Scripts下看到coverage.
- Python中编码问题:u'\xe6\x97\xa0\xe5\x90\x8d' 类型的转为utf-8的解决办法相信小伙伴们遇