python中如何提高图像质量_第1页
python中如何提高图像质量_第2页
python中如何提高图像质量_第3页
python中如何提高图像质量_第4页
python中如何提高图像质量_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第python中如何提高图像质量目录python提高图像质量概述百度智能云PIL实现opencv实现python实现图像质量评价准则PSNR总结

python提高图像质量

概述

调研了一些提高图像质量的方式

深度学习方法,如微软的Bringing-Old-Photos-Back-to-Life的模型等。存在一些问题,首先是使用深度学习方法没有刚好的模型,得在自己的数据集上微调,比较麻烦,其次是带来的推理时间开销会比较大,不是特别划算,毕竟只是一个小环节。商用API,发现百度智能云提供了很多这方面的API,调用相当方便,但是免费次数有限啊。基于python自带的PIL实现图片亮度增强、饱和度增强、对比度增强以及锐度增强。基于opencv实现数字图像处理!!!

百度智能云

官方教程:链接

参考代码(方便的一塌糊涂):

fromaipimportAipImageProcess

importbase64

importos

APP_ID=''

API_KEY=''

SECRET_KEY=''

client=AipImageProcess(APP_ID,API_KEY,SECRET_KEY)

"""读取图片"""

defget_file_content(filePath):

withopen(filePath,'rb')asfp:

returnfp.read()

defget_all_file(path):

all_file=[]

foriinos.listdir(path):

file_name=os.path.join(path,i)

all_file.append(file_name)

returnall_file

forimg_pathinget_all_file('img'):

image=get_file_content(img_path)

"""调用图像清晰度增强"""

ifnotos.path.exists('output'):

os.mkdir('output')

response=client.imageDefinitionEnhance(image)

imgdata=base64.b64decode(response['image'])

file=open(os.path.join('output',img_path.split('\\')[-1]),'wb')

file.write(imgdata)

file.close()

PIL实现

fromPILimportImage

fromPILimportImageEnhance

importnumpyasnp

importmatplotlib.pyplotasplt

plt.rcParams['font.sans-serif']=['FangSong']#设置字体以便正确显示汉字

plt.rcParams['axes.unicode_minus']=False#正确显示连字符

image=Image.open('img/timg.jpg')

#亮度增强

enh_bri=ImageEnhance.Brightness(image)

brightness=2

image_brightened=enh_bri.enhance(brightness)

#色度增强(饱和度↑)

enh_col=ImageEnhance.Color(image)

color=2

image_colored=enh_col.enhance(color)

#对比度增强

enh_con=ImageEnhance.Contrast(image)

contrast=2

image_contrasted=enh_con.enhance(contrast)

#锐度增强

enh_sha=ImageEnhance.Sharpness(image)

sharpness=4.0

image_sharped=enh_sha.enhance(sharpness)

fig,axes=plt.subplots(nrows=2,ncols=3,figsize=(10,8),dpi=100)

axes[0,0].imshow(np.array(image,dtype=np.uint8)[:,:,::-1])

axes[0,0].set_title("原图")

axes[0,1].imshow(np.array(image_brightened,dtype=np.uint8)[:,:,::-1])

axes[0,1].set_title("亮度增强")

axes[0,2].imshow(np.array(image_colored,dtype=np.uint8)[:,:,::-1])

axes[0,2].set_title("饱和度增强")

axes[1,0].imshow(np.array(image_contrasted,dtype=np.uint8)[:,:,::-1])

axes[1,0].set_title("对比度增强")

axes[1,1].imshow(np.array(image_sharped,dtype=np.uint8)[:,:,::-1])

axes[1,1].set_title("锐度增强")

axes[1,2].imshow(np.array(image_sharped,dtype=np.uint8)[:,:,::-1])

axes[1,2].set_title("锐度增强")

plt.show()

opencv实现

链接

python实现图像质量评价准则PSNR

计算PSNR的Python代码,网上有下面两种:

importcv2

importnumpyasnp

importmath

defpsnr1(img1,img2):

mse=np.mean((img1-img2)**2)

ifmse1.0e-10:

return100

return10*math.log10(255.0**2/mse)

defpsnr2(img1,img2):

mse=np.mean((img1/255.-img2/255.)**2)

ifmse1.0e-10:

return100

PIXEL_MAX=1

return20*math.log10(PIXEL_MAX/math.sqrt(mse))

理论上,这两种计算方式都对应上面的计算公式,在输入图像一样的情况下,这两段代码的结果应该是一样的。

但是,在调用这段代码的时候,我发现这两者的结果却相差很远,同样的图片,psnr1的结果大概是29,而psnr2的结果是12。

gt=cv2.imread('1.jpg')

img=cv2.imread('2.jpg')

print(psnr1(gt,img))

print(psnr2(gt,img))

单看代码的话完全看不出来任何问题,后来我输出了这两张图像作差的结果,发现所有的值都是在0-255之间的,比如img1的一个像素值是30,img2的一个像素值是60,二者作差,本来应该是-30,但是结果却是226,即对于负值,输出要加上256。

所以,问题就出在这行代码上:

mse=np.mean((img1-img2)**2)

如果img1某个点的像素比img2小,而两者差别又比较大,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论