-
2019-04-25 22:12:06更多相关内容
-
python实现图像增强
2018-06-09 10:37:19主要是深度学习模型进行图像增强,实现深度学习训练阶段做图像扩增,增加模型的泛化能力。 -
python实现图像数据增强
2018-10-29 16:35:39python实现图像数据增强,实现对数据的增强,包括调亮,调暗,裁剪,镜像等等等,操作简单,可批量处理 -
基于Python的图像数据增强Data Augmentation解析
2020-09-18 20:30:21主要介绍了基于Python的图像数据增强Data Augmentation解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 -
图像的去噪与增强python,图像降噪和图像增强的关系,Python
2021-09-10 23:12:17此代码可以实现图像的去噪和增强 -
图像色彩增强-python实现
2020-06-18 18:01:21Python实现GIMP色彩增强插件,主要在CMYK,BGR和HSV颜色空间进行处理。 -
图像的去噪与增强python_python图像去噪_图像增强_图像的去噪与增强算法--python_图像去噪python_图像去
2021-09-10 23:12:17此代码可以实现图像的去噪和增强 -
常见图像增强(python 实现)
2022-04-11 18:46:59用于增强暗背景下的图像,使人眼能够观看到更多细节。 假设原始图像的灰度范围是[0,L],L表示该图像最大的灰度值,则反色变换为output = L - input import numpy as np from PIL import Image import matplotlib....反色变换
推荐B站UP,十四阿哥很nice
几节图像处理课讲的很清楚。
用于增强暗背景下的图像,使人眼能够观看到更多细节。
假设原始图像的灰度范围是[0,L],L表示该图像最大的灰度值,则反色变换为output = L - inputimport numpy as np from PIL import Image import matplotlib.pyplot as plt # 1,反色变换 # 假设原始图像的灰度范围是[0,L],L表示该图像最大的灰度值 # 则反色变换为output = L - input def image_inverse(input): value_max = np.max(input) output = value_max - input return output gray_img = np.asarray(Image.open('X.jpg').convert('L')) inv_img = image_inverse(gray_img) plt.subplot(121) plt.title('original') plt.imshow(gray_img, cmap='gray', vmin=0, vmax=255) plt.subplot(122) plt.title('inverse') plt.imshow(inv_img, cmap='gray', vmin=0, vmax=255) plt.show()
对数变换
对数变换,目的是压缩图像矩阵值域的动态范围,让我们可以看到更多细节
假设原始图像灰度取值范围是[x1,x2], (x1>=x2>=0)
则对数变换为 output = log(1 + input)
log输入为0时输出为负无穷,+1就是为了避免此情况(或者理解为偏置)imshow绘图时,若不指定vmin,vmax,默认输入最小值为vmin对应0,vmax对应255
def set_Chinese(): import matplotlib matplotlib.rcParams['font.sans-serif'] = ['SimHei'] matplotlib.rcParams['axes.unicode_minus'] = False def image_log(input): return np.log(1 + input) set_Chinese() # 解决中文乱码问题 input = np.array([[10, 150], [250, 25500]]) output = image_log(input) fig = plt.figure() ax1 = fig.add_subplot(121) ax1.set_title('对数变换前', fontsize=12) ax1.imshow(input, cmap='gray', vmin=0, vmax=25500) ax2 = fig.add_subplot(122) ax2.set_title('对数变换后', fontsize=12) ax2.imshow(output, cmap='gray') plt.show()
伽马变换
又称幂律变换,因为使用幂函数来操作输入图像,表达式
- gamma次幂称为伽马系数,在伽马变换中规定这个数必须为正数
- eps 称为补偿系数,默认0(如果没有eps,当input中有为0时,对该像素的伽马变换就失效了,0的任意次幂都为0)
但幂运算又导致图像输出动态范围过大,引入归一化(8bit像素):
def gamma_trans(input, gamma=2, eps=0): return 255.*(((input + eps) / 255.) ** gamma) def update_gamma(val): gamma = slider1.val output = gamma_trans(input_arr, gamma=gamma, eps=0.5) print('------------\n', output) ax1.set_title('伽马变换后,gamma = ' + str(gamma)) ax1.imshow(output, cmap='gray', vmin=0, vmax=255) set_Chinese() input_arr = np.array([[0, 50, 100, 150], [0, 50, 100, 150], [0, 50, 100, 150], [0, 50, 100, 150]]) fig = plt.figure() ax0 = fig.add_subplot(121) ax0.set_title('输入矩阵') ax0.imshow(input_arr, cmap='gray', vmin=0, vmax=255) ax1 = fig.add_subplot(122) plt.subplots_adjust(bottom=0.3) # 划分一块滑动条,从底部向上30% # 设置属性和颜色 s1 = plt.axes([0.25, 0.1, 0.55, 0.03], facecolor='lightgoldenrodyellow') # 创建滑动条,范围0-2,初始为1,步长0.1 slider1 = Slider(s1, '参数gamma', 0.0, 2.0, valfmt='%.f', valinit=1.0, valstep=0.1) slider1.on_changed(update_gamma) plt.show()
肉眼观测的话gamma(>1)越大图像越黑,gamma(<1)越小图像越亮。
应用:- 矫正显示失真
CRT显示器的物理特性导致送入显示器的灰度值并非线性输出,而是以幂函数的形式非线性输出。不同厂家的幂不一样,一般介于1.8-2.5所以我们先对输入做伽马变换,gamma = 1 /(厂家的幂)处理,保证线性输出。
''' 【功能】利用γ变换提前矫正图像,从而实现图像在CRT显示器中正常显示 【B站/YouTube】轩辕十四很nice 【开源协议】The MIT License (MIT) ''' from PIL import Image import numpy as np import matplotlib.pyplot as plt from matplotlib.widgets import Slider, Button, RadioButtons def set_chinese(): # 中文显示工具函数 import matplotlib print("[INFO] matplotlib版本为:%s" % matplotlib.__version__) matplotlib.rcParams['font.sans-serif'] = ['FangSong'] matplotlib.rcParams['axes.unicode_minus'] = False def gamma_trans(input, gamma=2, eps=0 ): return 255. * (((input + eps)/255.) ** gamma) def crt_distortion(input, gamma=2): # 模拟CRT失真(做了归一化) return 255. * ((input/255.) ** gamma) def update_gamma(val): gamma = slider1.val # 获取"失真γ" # 图像送入CRT前,先做伽马变换预处理 gamma_ = 1 / gamma # "矫正γ" 为 "失真γ" 的倒数 correct_img = gamma_trans(gray_img, gamma_, 0) # ax1.set_title("伽马矫正,矫正γ = 1/" + str(round(gamma,2))) ax1.imshow(correct_img, cmap='gray',vmin=0,vmax=255) # 简易模拟CRT输出 output = crt_distortion(correct_img, gamma) print(output) ax2.set_title("模拟CRT输出,失真γ = " + str(round(gamma,2))) ax2.imshow(output, cmap='gray',vmin=0,vmax=255) if __name__ == '__main__': set_chinese() gray_img = np.asarray(Image.open('./intensity_ramp.tif').convert('L')) fig = plt.figure() ax0 = fig.add_subplot(131) ax1 = fig.add_subplot(132) ax2 = fig.add_subplot(133) ax0.set_title("原始图片") ax0.imshow(gray_img, cmap='gray',vmin=0,vmax=255) plt.subplots_adjust(bottom=0.3) s1 = plt.axes([0.25, 0.1, 0.55, 0.03], facecolor='lightgoldenrodyellow') slider1 = Slider(s1, 'CRT失真γ: ', 0.0, 4.0, valfmt='%.f', valinit=1.0, valstep=0.1) slider1.on_changed(update_gamma) slider1.reset() slider1.set_val(2) plt.show()
数学原理:
伽马变换可以调节图片对比度,进而体现更多细节。- gamma < 1,提亮图像,扩展暗部的动态范围,压缩亮部的动态范围
- gamma > 1,变暗图像,压缩暗部动态范围,扩展亮部动态范围
伽马变换:通过幂函数扩展后的动态范围没有变,只是改变了直方图的数据分布。
但伽马变换的曲线总是存在斜率约等于1的部分,如果图片的像素分布落在斜率等于1的区间,伽马变换的效果就比较微弱了。
所以引入分段线性变换分段线性变换
顾名思义,是个分段函数,分多少段也看需求。假设分成三段。
-
python图像数据增强
2019-03-16 16:47:01此代码用于实现图像数据增强,对图片进行批量处理。包括图片旋转、翻转、模糊、增加噪声、亮度几种处理。运行需要安装python、opencv、numpy等。 使用时将图片统一放在img文件夹中,并将img文件夹和下载的py文件放在... -
image_HDR_python:图像HDR,主要用于暗光照的增强,python实现
2021-05-13 10:12:14image_HDR_python 图像HDR,主要用于暗光照的增强,python实现 创新点:只对缺失光照的地方进行补光增强,而对光照充足的区域影响较小 需要环境: python3 numpy opencv-python scipy -
python—图像增强
2021-11-27 16:16:57def img_chuli_plt2(): ... # 彩色图像每个像素值是[x,y,z], 灰度图像每个像素值便是一个np.uint8 path = './img/0.jpg' # 路径二维码 # path = './img/sachin.jpg' # 路径 image = cv2.imread(path) gra.def img_chuli_plt2(): import cv2 import random # import imutils import numpy as np # 彩色图像每个像素值是[x,y,z], 灰度图像每个像素值便是一个np.uint8 path = './img/0.jpg' # 路径二维码 # path = './img/sachin.jpg' # 路径 image = cv2.imread(path) gray_img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 图像大小调整 ori_h, ori_w = image.shape[:2] height, width = gray_img.shape[:2] image = cv2.resize(image, (int(ori_w / ori_h * 400), 400), interpolation=cv2.INTER_CUBIC) gray_img = cv2.resize(gray_img, (int(width / height * 400), 400), interpolation=cv2.INTER_CUBIC) # a<0 and b=0: 图像的亮区域变暗,暗区域变亮 a, b = -0.5, 0 new_img1 = np.ones((gray_img.shape[0], gray_img.shape[1]), dtype=np.uint8) for i in range(new_img1.shape[0]): for j in range(new_img1.shape[1]): new_img1[i][j] = gray_img[i][j] * a + b # a>1: 增强图像的对比度,图像看起来更加清晰 a, b = 1.5, 20 new_img2 = np.ones((gray_img.shape[0], gray_img.shape[1]), dtype=np.uint8) for i in range(new_img2.shape[0]): for j in range(new_img2.shape[1]): if gray_img[i][j] * a + b > 255: new_img2[i][j] = 255 else: new_img2[i][j] = gray_img[i][j] * a + b # a<1: 减小了图像的对比度, 图像看起来变暗 a, b = 0.5, 0 new_img3 = np.ones((gray_img.shape[0], gray_img.shape[1]), dtype=np.uint8) for i in range(new_img3.shape[0]): for j in range(new_img3.shape[1]): new_img3[i][j] = gray_img[i][j] * a + b # a=1且b≠0, 图像整体的灰度值上移或者下移, 也就是图像整体变亮或者变暗, 不会改变图像的对比度 a, b = 1, -50 new_img4 = np.ones((gray_img.shape[0], gray_img.shape[1]), dtype=np.uint8) for i in range(new_img4.shape[0]): for j in range(new_img4.shape[1]): pix = gray_img[i][j] * a + b if pix > 255: new_img4[i][j] = 255 elif pix < 0: new_img4[i][j] = 0 else: new_img4[i][j] = pix # a=-1, b=255, 图像翻转 new_img5 = 255 - gray_img cv2.imshow('origin', image) cv2.imshow('gray', gray_img) cv2.imshow('a<0 and b=0', new_img1) cv2.imshow('a>1 and b>=0',new_img2) cv2.imshow('a<1 and b>=0',new_img3) cv2.imshow('a=1 and b><0',new_img4) cv2.imshow('a=-1 and b=255',new_img5) if cv2.waitKey(0) == 27: cv2.destroyAllWindows() # 感谢:https: // blog.csdn.net / feilong_csdn / article / details / 82780664
-
python基于opencv实现图像增强代码示例
2021-02-10 08:34:52本篇文章小编给大家分享一下python基于opencv实现图像增强代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。灰度直方图灰度直方图通过描述灰度级在图像...本篇文章小编给大家分享一下python基于opencv实现图像增强代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
灰度直方图
灰度直方图通过描述灰度级在图像矩阵中的像素个数来展示图像灰度级的信息,通过灰度直方图的统计我们可以看到每个灰度值的占有率。下面是一个灰度直方图的实现:
import cv2
import numpy as np
import sys
import matplotlib.pyplot as plt
#计算灰度直方图
def calcGrayHist(image):
rows,clos = image.shape
#创建一个矩阵用于存储灰度值
grahHist = np.zeros([256],np.uint64)
print('这是初始化矩阵')
print(grahHist )
for r in range(rows):
for c in range(clos):
#通过图像矩阵的遍历来将灰度值信息放入我们定义的矩阵中
grahHist[image[r][c]] +=1
print('这是赋值后的矩阵')
print(grahHist)
return grahHist
if __name__=="__main__":
image = cv2.imread("../img/aa.jpg",cv2.IMREAD_GRAYSCALE)
grahHist = calcGrayHist(image)
x_range = range(256)
plt.plot(x_range,grahHist,'-',linewidth= 3,c='k')
#设置坐标轴的范围
y_maxValue = np.max(grahHist)
plt.axis([0,255,0,y_maxValue])
#设置标签
plt.xlabel('gray Level')
plt.ylabel("number of pixels")
#显示灰度直方图
plt.show()
运行结果
线性变换
线性变换的公式为:
图像的线性变换无疑就是利用矩阵的乘法就行线性变换,比如一个矩阵I ,2I,3I (np.unt8 ndarry类型就是unt8类型)就是一个矩阵的变换.
import cv2
import numpy as np
import sys
if __name__=="__main__":
img = cv2.imread("../img/ae.jpg",cv2.IMREAD_GRAYSCALE)
a=2
#线性变换 定义float类型
O = float(a)*img
#数据截取 如果大于255 取 255
O[0>255] = 255
#数据类型的转换
O = np.round(O)
O = O.astype(np.uint8)
cv2.imshow("img",img)
cv2.imshow('enhance',O)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果:
灰度级范围越大就代表对比度越高,反之对比度越低视觉上清晰度就越低。我们通过a=2的线性对比度拉伸将灰度级范围扩大到[0,255]之间,如上图我们改变灰度级的范围后图像变的清晰。
直方图正规化
将图像O中的最小灰度级记为OminOmin,最大灰度级记为OmaxOmax,假如输出的图像P的灰度级范围为[Pmin,PmaxPmin,Pmax],则O 与 P的关系为:
其中P(r,c)就代表P的第r行第c列的灰度值。这个过程就是直方图的正规化。我们一般令P的范围是[0,255],所以直方图的正规化是在求a,b变换的值的方法,我们可以得到:
下面我们使用OpenCV来实现上面的理论:
import cv2
import numpy as np
import sys
from enhance.GrayHist import mget
if __name__=="__main__":
img = cv2.imread("../img/o3.jpg",cv2.IMREAD_GRAYSCALE)
#求出img 的最大最小值
Maximg = np.max(img)
Minimg = np.min(img)
print(Maximg, Minimg, '-----------')
#输出最小灰度级和最大灰度级
Omin,Omax = 0,255
#求 a, b
a = float(Omax - Omin)/(Maximg - Minimg)
b = Omin - a*Minimg
print(a,b,'-----------')
#线性变换
O = a*img + b
O = O.astype(np.uint8)
#利用灰度直方图进行比较 mget为GrayHist中的写方法
mget(img)
mget(O)
cv2.imshow('img',img)
cv2.imshow('enhance',O)
cv2.waitKey(0)
cv2.destroyAllWindows()
伽玛变换
将一张图的灰度值归至[0,1]后,对于8位图来说,除以255即可。伽玛变换就是令O(r,c)=I(r,c)γI(r,c)γ,0≤r
当γγ等于1时图像不发生变换,而当γγ大于0且小于1时就可以增强图像的对比度,相反的当γγ大于1时就可以使图像对比度降低。 以下是伽玛变换在OpenCV中的实现:
import cv2
import numpy as np
import sys
# 伽玛变换 power函数实现幂函数
if __name__ == "__main__":
img = cv2.imread("../img/ae.jpg", cv2.IMREAD_GRAYSCALE)
# 归1
Cimg = img / 255
# 伽玛变换
gamma = 0.5
O = np.power(Cimg,gamma)
#效果
cv2.imshow('img',img)
cv2.imshow('O',O)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果:
直方图的均衡化
计算图像的灰度直方图
计算灰度直方图的累加直方图
根据累加的直方图和直方图均衡化的原理得到输入灰度级与输出灰度级之间的映射关系
使用循环的方式得到输出图像的每一个像素的灰度级
import cv2
import numpy as np
from enhance.GrayHist import calcGrayHist
#直方图的均衡化
if __name__ == "__main__":
image = cv2.imread("../img/ae.jpg", cv2.IMREAD_GRAYSCALE)
rows,cols = image.shape
#计算灰度直方图
grayHist = calcGrayHist(image)
#计算累加灰度直方图
zeroCumuMoment = np.zeros([256], np.uint32)
for p in range(256):
if p == 0:
zeroCumuMoment[p] = grayHist[0]
else:
zeroCumuMoment[p] = zeroCumuMoment[p-1] + grayHist[p]
#根据累加的灰度直方图得到输入与输出灰度级之间的映射关系
output = np.zeros([256],np.uint8)
cofficient = 256.0/(rows*cols)
for p in range(256):
q = cofficient * float(zeroCumuMoment[p])-1
if q >=0:
output[p] = np.math.floor(q)
else:
output[p] = 0
#得出均衡化图像
equalHistimg = np.zeros(image.shape,np.uint8)
for r in range(rows):
for c in range(cols):
equalHistimg[r][c] = output[image[r][c]]
cv2.imshow('image',image)
cv2.imshow('histimage',equalHistimg)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果:
-
传统图像增强算法python实现
2021-05-18 16:47:25图像反转(Image Negative)在许多应用中都很有用,例如显示医学图像和用单色正片拍摄屏幕,其想法是将产生的负片用作投影片。 转换方程:T:G(x,y)=L−F(x,y),其中L是最大强度值,灰度图像L为255。 效果... -
Retinex图像增强python.rar
2020-05-18 16:50:37pythonRetinex图像增强代码,包含MSRCR,MSR,SSR,MSRCP,自动MSR,MSRCR论文。 -
这是综合评论文章“基于实验的水下成像图像增强和图像还原方法的回顾”的Python实现。
2021-05-05 04:48:32这是python实施的综合评论文章“用于水下成像的图像增强和图像恢复方法的基于实验的评论” 抽象的! 水下图像在海洋勘探中起着关键作用,但由于光在水介质中的吸收和散射,经常会遭受严重的质量下降。 尽管近来在... -
python opencv 实现对图像边缘扩充
2020-09-18 02:11:01今天小编就为大家分享一篇python opencv 实现对图像边缘扩充,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
数字图像处理python实现-图像增强篇
2020-02-08 17:33:54冈萨雷斯-图像增强篇内容简介直方图均衡增强空间域算子增强合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右... -
图像增强(Python实现)
2018-12-02 09:58:37题目描述:对于下面这幅图像(图 1),请问可以通过那些图像增强的手段,达到改善视觉效果的目的?请显示处理结果,并附简要处理流程说明。 图 1 原图 常用的图像增强方法有以下几种: 1.提高对比度... -
Python-OpenCV实现了Torchvision的图像增强功能
2019-08-10 04:55:08OpenCV实现了Torchvision的图像增强功能 -
图像增强——数字图像处理(python实现)
2020-10-15 21:32:49对于下面这幅图像,请问可以通过那些图像增强的手段,达到改善视觉效果的目的?请显示处理结果,并附简要处理流程说明。 2、问题分析 若想改善图片的质量,我们需要去除其中的噪声。图片轮廓不清晰,我们将其... -
opencv-python实现 图像增强_傅立叶变换(利用频率域滤波方法去掉图像“house”中的竖条纹)
2021-10-28 22:24:54利用频率域滤波方法去掉图像“house”中的竖条纹 import cv2 import numpy as np from matplotlib import pyplot as plt # 将gif图片转换成可识别图像 gif = cv2.VideoCapture('house.gif') ret, frame = gif.read... -
用Python实现图像数据增强
2021-07-13 18:52:15https://blog.csdn.net/weixin_42730096/article/details/84439805 -
数字图像处理学习笔记(十一)——用Python代码实现图像增强之线性变换、对数变换、幂律变换、分段线性变换...
2020-12-21 10:10:48在数字图像处理学习笔记(八)中,已对图像增强之线性变换、对数变换、幂律变换、分段线性变换、灰度级分层等做过详细理论论述,本文将对上述理论知识做实践方面的实现。 具体理论知识可参考我之前的博文:数字图像... -
用python实现图片的缩放,裁剪,颜色转换,图像增强,调节亮度
2022-04-05 10:54:02用python实现图片的缩放,颜色转换,图像增强,调节亮度等。 from PIL import Image import matplotlib.pyplot as plt import os import matplotlib.image as mpimg from scipy import misc from skimage import ... -
Python中的图像增强
2020-06-18 12:47:07当我们谈论图像增强时 ,这基本上意味着我们想要一个比原始图像更合适的图像新版本。 例如,当您扫描文档时,输出图像的质量可能会比原始输入图像低。 因此,我们需要一种提高输出图像质量的方法,以使输出图像在... -
用python实现对图像增强
2020-11-21 01:24:29一般我们对图像增强的是亮度,对比度,颜色,图像锐化等量纲。其中亮度是我们比较熟悉的量,也直观。对比度这就体现在灰度值上面提高对比度就会增大灰度值之间的差值!在这里为了大家更容理解亮度和对比度,我跟大家... -
使用python实现图像对比度增强
2018-05-25 22:15:08对单张图像进行图像对比度增强:from PIL import Image from PIL import ImageEnhance img = Image.open('./0h/FGF2.tif') img.show() #对比度增强 enh_con = ImageEnhance.Contrast(img) contrast = 1.5 img_... -
python 基于opencv实现图像增强
2021-01-28 10:03:34为了得到更加清晰的图像我们需要通过技术对图像进行处理,比如使用对比度增强的方法来处理图像,对比度增强就是对图像输出的灰度级放大到指定的程度,获得图像质量的提升。本文主要通过代码的方式,通过OpenCV的内置... -
Low-light-Image-Enhancement:通过光照图估计实现两种低光图像增强技术的Python
2021-08-05 05:00:47基于以下论文,通过光照图估计实现两种低光图像增强技术的 Python 实现: 稳健曝光校正的双光照估计 [] LIME:通过照明图估计进行低光图像增强 [] 这两种方法都基于 retinex 建模,旨在通过保留图像的突出结构来... -
python 图像增强算法实现
2021-01-23 10:46:01# 其中,基于拉普拉斯算子的图像增强为利用空域卷积运算实现滤波 # 基于同一图像对比增强效果 # 直方图均衡化:对比度较低的图像适合使用直方图均衡化方法来增强图像细节 # 拉普拉斯算子可以增强局部的图像对比度 # ...