我是目前正在进行以研究为主导的调查实验室的二级学生。我正在研究太阳黑子,作为任务的一部分,我正在编写一个Python模块,它将(除其他外)去除渐晕对图像的影响 - 也就是说,由于效果,光线逐渐变暗到照片的边缘相机我想尝试使用Python删除它。
我到目前为止解决这个问题的方法是拍摄一张应该是统一的背景照片,纠正Vignetting造成的影响,然后通过这个“测试”图像划分我们实际关心的图像阵列(请参阅代码以获取更详细的文档字符串)。但是,这不是很有效,我不知道为什么。我猜这个问题出现在第18行 - 我只是错误地“合并”了图像数组 - 但我不确定如何解决这个问题。
正如你可能猜到的那样,我已经把这个问题弄得很老了,目前我不知道下一步该做什么 - 所以任何建议,帮助,指导或提示都会非常感激!
到目前为止,这是我的尝试:
from __future__ import division
import numpy
from PIL import Image
import matplotlib.pyplot as pyplot
IMAGE_1 = Image.open("Vignette test.jpg") #Import a grayscale test image of a uniform background.
ARRAY_1 = numpy.array(IMAGE_1) #Convert into array and slice into just 2 dimensions.
GRAYSCALE_ARRAY_1 = ARRAY_1[:,:,0]
MAX_PIXEL_1 = numpy.amax(GRAYSCALE_ARRAY_1) #Standardise grayscale array by setting max pixel value to 1.
STANDARDISED_ARRAY_1 = GRAYSCALE_ARRAY_1 / MAX_PIXEL_1
IMAGE_2 = Image.open("IMG_1982.jpg") #Import the image we wish to remove the vignette effect from.
ARRAY_2 = numpy.array(IMAGE_2) #Convert into array and slice into just 2 dimensions.
GRAYSCALE_ARRAY_2 = ARRAY_2[:,:,0]
MAX_PIXEL_2 = numpy.amax(GRAYSCALE_ARRAY_2) #Standardise grayscale array by setting max pixel value to 1.
STANDARDISED_ARRAY_2 = GRAYSCALE_ARRAY_2 / MAX_PIXEL_2
CORRECTED_ARRAY = STANDARDISED_ARRAY_2 / STANDARDISED_ARRAY_1 #Divide the two arrays to remove vignetting.
MAX_PIXEL_3 = numpy.amax(CORRECTED_ARRAY) #Standardise corrected array by setting max pixel value to 1.
STANDARDISED_ARRAY_3 = CORRECTED_ARRAY / MAX_PIXEL_3
ARRAY_3 = STANDARDISED_ARRAY_3 * MAX_PIXEL_2 #Ensure that the max pixel value does not exceed 255.
IMAGE_3 = Image.fromarray(ARRAY_3) #Convert into image
pyplot.figure(figsize=(10,12))
pyplot.subplot(211)
IMGPLOT = pyplot.imshow(IMAGE_2) #Represent orignal image graphically with colour bar
IMGPLOT.set_cmap('gray')
pyplot.colorbar()
pyplot.subplot(212)
IMGPLOT = pyplot.imshow(IMAGE_3) #Represent corrrected image graphically with colour bar
IMGPLOT.set_cmap('gray')
pyplot.colorbar()
pyplot.show()
答案 0 :(得分:2)
事实证明,'测试'图像和我们关心的图像必须具有相同的曝光时间才能使其工作 - 代码本身没有任何错误。