the*_*pen 1 python numpy python-3.x
我正在尝试为灰度颜色的图像编写对比度调整,但到目前为止找不到正确的方法。这是我想出的:
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
from scipy import misc
def fix_contrast(image):
minimumColor = np.amin(image)
maximumColor = np.amax(image)
#avg = (minimumColor - maximumColor)/2 first attempt
avg = np.mean(image) #second attempt
colorDownMatrix = image < avg # also tried
colorUpMatrix = image > avg
#also tried: colorUpMatrix = image > avg * 1.2
# and : colorDownMatrix = image < avg* 0.3
image = image - minimumColor*colorDownMatrix
image = image + maximumColor*colorUpMatrix
lessThen0 = image<0
moreThen255 = image>255
image[lessThen0] = 0
image[moreThen255] = 255
return image
Run Code Online (Sandbox Code Playgroud)
我通常的尝试是将元素“更接近”到0的像素减少到0,将元素“更接近”到255的像素增加到255。 ,但是我的所有尝试都没有使我取得任何好的结果。
我在解决方案附近吗?任何提示/技巧都很棒
Joh*_*mar 10
增加对比度(即分开较暗和较亮的像素)的最简单方法就是在整个光谱(0 到 255)上“拉伸”当前现有范围(144 到 216):
设置,与此答案中的方式相同。
import numpy as np
from PIL import Image
pixvals = np.array(Image.open("image.png").convert("L"))
Run Code Online (Sandbox Code Playgroud)
然后扩大范围
pixvals = ((pixvals - pixvals.min()) / (pixvals.max()-pixvals.min())) * 255
Image.fromarray(pixvals.astype(np.uint8))
Run Code Online (Sandbox Code Playgroud)
结果实际上与此答案相同,只是代码稍微少一些:

现在,在这张图片中,这可能就足够了。然而,某些图像可能有一些像素非常接近 0 或 255,这会使该方法无效。
这numpy.percentile()是救援。这个想法是“剪辑”允许像素存在的范围。
minval = np.percentile(pixvals, 2)
maxval = np.percentile(pixvals, 98)
pixvals = np.clip(pixvals, minval, maxval)
pixvals = ((pixvals - minval) / (maxval - minval)) * 255
Image.fromarray(pixvals.astype(np.uint8))
Run Code Online (Sandbox Code Playgroud)
这会导致对比度稍高一些,因为低于 2% 和高于 98% 的所有值都被有效删除。(根据您的需要使用这些值)

我正在学习Python,numpy并认为我会尝试实现“查找表”(LUT)。它可以正常工作,并且输出图像的范围从黑色到白色,但是我很高兴收到改进的建议。
#!/usr/local/bin/python3
import numpy as np
from PIL import Image
# Open the input image as numpy array, convert to greyscale and drop alpha
npImage=np.array(Image.open("cartoon.png").convert("L"))
# Get brightness range - i.e. darkest and lightest pixels
min=np.min(npImage) # result=144
max=np.max(npImage) # result=216
# Make a LUT (Look-Up Table) to translate image values
LUT=np.zeros(256,dtype=np.uint8)
LUT[min:max+1]=np.linspace(start=0,stop=255,num=(max-min)+1,endpoint=True,dtype=np.uint8)
# Apply LUT and save resulting image
Image.fromarray(LUT[npImage]).save('result.png')
Run Code Online (Sandbox Code Playgroud)
关键字:Python,Numpy,PIL,枕头,图像,图像处理,LUT,查找表,查找,对比度,拉伸。
| 归档时间: |
|
| 查看次数: |
4214 次 |
| 最近记录: |