首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(Py)贵宾对枕头提升图像质量

(Py)贵宾对枕头提升图像质量
EN

Stack Overflow用户
提问于 2018-10-29 17:14:44
回答 1查看 2.2K关注 0票数 5

调整图像的大小为200%,在枕头和比目鱼之间产生质量差异。

枕头是非常准确的复制,重要人物夸大噪音和对比。

我需要使用贵宾非常大的图像,但质量是不能令人满意的。知道如何从贵宾那里得到更好的提升吗?(从文档中我了解到,升级对于贵宾来说并不是很重要,而且大多数人的想法都是降尺度的)。

示例:

代码语言:javascript
运行
复制
from PIL import Image
import pyvips
import numpy as np

#Vips
img = pyvips.Image.new_from_file("mypic.jpg", access='sequential')
out = img.resize(2, kernel = "linear")
out.write_to_file("mypic_vips_resized.tif")

#Pillow
img = np.array(Image.open("mypic.jpg"))
h, w = img.shape[:2]
out = Image.fromarray(img,mode="RGB")
out = out.resize((w*2,h*2), Image.BILINEAR)
out.save("mypic_PIL_resized.tif", format='TIFF', compression='None')

原件:

枕头:

重要人物:

摘要示例(10*10像素)

原件:

枕头双线性:

重要人物线性:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-30 14:08:58

看起来枕头是线性的三角形过滤器,而大号的libvips是做简单的插值。libvips使用三角形过滤器来缩小大小。

如果你想象像素:

代码语言:javascript
运行
复制
A 
B 
C 

然后枕头计算A和B之间的新像素,B位置的像素,B和C之间的新像素,如下:

代码语言:javascript
运行
复制
(A + B) / 2
(A + B) / 4 + B / 2 + (B + C) / 4
(B + C) / 2

而libvips正在计算:

代码语言:javascript
运行
复制
(A + B) / 2
B
(B + C) / 2

你可以得到一个三角形过滤器的效果,首先做一个非常温和的模糊。如果我把你的程序改为:

代码语言:javascript
运行
复制
img = pyvips.Image.new_from_file('mypic.png', access='sequential')
img = img.gaussblur(0.45, precision='float', min_ampl=0.01).cast('uchar')
out = img.resize(2, kernel='linear')
out.write_to_file('mypic_vips_resized_blur.png')

即。做一个小半径,高精度的gaussblur首先,我得到:

其中从左到右的图像是1)一个简单的x2像素双倍,2)枕头LINEAR,3) libvips linear,4) libvips gaussblur + linear。你可能需要点击图片,否则你的浏览器会缩小它,模糊它。

和4)似乎相当接近我的眼睛(不是伟大的)。( 3)似乎比原来更真实,因为原来的振铃和噪音还没有消除。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53050625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档