【发布时间】:2021-03-28 09:25:41
【问题描述】:
我堆叠了反相棕褐色滤镜。 反相过滤的结果与预期不符。
我的逻辑如下: processes_pixel = np.dot(sepia_filter, original_pixel)
这意味着: original_pixel = np.dot(np.inverse(sepia_filter), processes_pixel)
这是我尝试过的代码 - 我还尝试了其他几种方法,例如单独反转颜色,然后求解线性方程组,但得到相同的结果,所以我假设我不明白某些东西至关重要。
要求:
import numpy as np
from PIL import Image, ImageDraw
棕褐色过滤器代码:
def get_pixel_after_sepia(source, pixel, sepia_filter):
colors = np.array(source.getpixel(pixel))
colors_new = tuple(map(int, np.dot(sepia_filter,colors))) + (255,) # apply filter, transform results to ints, cut to 255
return colors_new
def sepia(source, result_name):
result = Image.new('RGB', source.size)
sepia_filter = np.array([[0.393,0.769,0.189], [0.349,0.686,0.168], [0.272,0.534,0.131]])
# for every pixel
for x in range(source.size[0]):
for y in range(source.size[1]):
new_pixel = get_pixel_after_sepia(source, (x,y), sepia_filter)
result.putpixel((x, y),new_pixel)
result.save(result_name, "JPEG")
return result
反棕褐色代码:
def get_pixel_before_sepia(source, pixel, inversed_sepia_filter):
colors = np.array(source.getpixel(pixel))
colors_new = tuple(map(int, np.dot(inversed_sepia_filter, colors)))+ (255,)
return colors_new
def inverse_sepia(image_with_sepia, result_file):
result = Image.new('RGB', image_with_sepia.size)
sepia_filter = np.array([[0.393,0.769,0.189], [0.349,0.686,0.168], [0.272,0.534,0.131]])
inverse_sepia_filter = np.linalg.inv(sepia_filter)
for x in range(image_with_sepia.size[0]):
for y in range(image_with_sepia.size[1]):
new_pixel = get_pixel_before_sepia(image_with_sepia, (x,y), inverse_sepia_filter)
result.putpixel((x, y),new_pixel)
result.save(result_file, "JPEG")
return result
函数执行:
image = Image.open("original_image.jpg")
filtered_image = sepia(image, "filtered.jpg") # result_pixel = dot_product(Filter, origin_pixel)
image_after_filter_reversing = inverse_sepia(filtered_image,'restored.jpg' ) # result_pixel = dot_product(Filter^(-1), filtering_result_pixel)
原图
过滤后的图像
Image_after_filter_reversing
我知道不可能进行完美的反转,因为我们正在切割计算结果并将它们四舍五入为 int。但我希望反转后的图像与原始图像非常接近。 我是图像处理的新手,但数学上的问题看起来对我来说完全有效。
【问题讨论】:
-
有什么问题?
-
问题是mysepia反转算法不能正常工作
-
你能说得更具体点吗?因为我们无法运行您的代码。您是否收到错误消息或结果不是您所期望的?
-
抱歉 - 结果与预期不符。
-
如果将
filtered_image输入inverse_sepia函数会发生什么?
标签: python algorithm numpy opencv image-processing