从日光到夕阳:利用直方图匹配实现逼真图像转换
本示例说明了直方图匹配技术,该技术用于转换一幅图像的像素亮度分布,使其与参考图像的像素亮度分布相匹配。如果图像是多通道的,则在通道数匹配的前提下,对每个通道分别进行处理。
直方图匹配被广泛应用于计算机视觉和图像处理任务中。例如,在处理不同光照条件下或从不同设备(如相机或传感器)获取的数据时,它是不可或缺的。这种方法可以统一图像的外观,在物体识别、图像注册和特征匹配等任务中尤为重要。
直方图匹配的实际应用实例
1.医学图像预处理,在这种情况下,保持来自不同设备的数据的一致性非常重要。
处理一天中不同时间或不同角度拍摄的航空和卫星图像。
3.为机器学习准备数据,一致的图像统计有助于提高模型的质量。
这项技术有很多应用,现在让我们来看一个例子
任务是通过改变图像的色调和亮度,使天空呈现暖色调(粉色和橙色),灯光变得更加柔和,具有傍晚的特征,从而将白天的风景图片转换成逼真的夕阳风景。
基本变换
导入所有必要的库
In [ ]:
import Pkg;
Pkg.add("TestImages")
Pkg.add("Images")
Pkg.add("Plots")
Pkg.add("ImageShow")
Pkg.add("ImageContrastAdjustment");
In [ ]:
using TestImages, Images, Plots
using ImageShow # Библиотека отрисовки изображений
using ImageContrastAdjustment
In [ ]:
cd( @__DIR__ )
下载图像
In [ ]:
download("https://i.pinimg.com/736x/b1/bd/66/b1bd661ff2bbc212eb3f44b209c1facf.jpg", "sourse.jpg")
download("https://i.pinimg.com/736x/1a/0e/3b/1a0e3b0301e2275f81d2abdf904ec12b.jpg", "reference.jpg");
上传图像
In [ ]:
path1 = "$(@__DIR__)/sourse.jpg"
path2 = "$(@__DIR__)/reference.jpg"
sourse = load(path1)
reference = load(path2);
可视化图像
In [ ]:
simshow(sourse)
Out[0]:
In [ ]:
simshow(reference)
Out[0]:
带有参数Matching
的功能adjust_histogram
可以进行直方图匹配,从而将日落的阴影转移到明亮的日间图像中。因此,图像会变得更暗。
In [ ]:
matched_image = adjust_histogram(sourse, Matching(targetimg=reference))
Out[0]:
让我们添加粉色色调,使图像闪耀着夕阳的色彩
In [ ]:
hsv_img = map(RGB -> convert(HSV, RGB), matched_image)
evening_hsv = map(hsv -> begin
if hsv.s < 0.2 && hsv.v > 0.7
HSV(0.95, min(hsv.s + 0.3, 1.0), hsv.v * 0.9)
else
HSV(hsv.h + 0.05, hsv.s + 0.1, hsv.v * 0.7)
end
end, hsv_img)
final_img = map(HSV -> convert(RGB, HSV), evening_hsv)
Out[0]:
为了显示直方图匹配的效果,我们绘制每个 RGB 通道的直方图。
In [ ]:
hist_final = [histogram(vec(c.(img)))
for c in (red, green, blue)
for img in [sourse, reference, final_img]
]
plot(
hist_final...,
layout = (3, 3),
size = (800, 800),
legend = false,
title = ["Source" "Reference" "Histograms Matched"],
reuse = false,
)
Out[0]:
来源:
亮度均匀分布,峰值位于中高强度区域(0.5-0.9),对应于明亮的一天。
参考文献:
亮度高度集中在下部(0.0-0.3),与日落天空的暗区和色调相对应。
组图匹配:
进行直方图匹配后的直方图。
图像亮度值经过转换,以接近参考直方图:
亮度降低(在 0.0-0.3 区域)。
日光特有的高亮度峰值消失。
结论
本示例展示了如何使用直方图匹配和改变 HSV 通道的强度将明亮的日光图像转换为日落色调