ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

老照片智能上色与色彩温润还原:让黑白胶片重现当年的江南水乡

老照片智能上色与色彩温润还原:让黑白胶片重现当年的江南水乡 老照片智能上色与色彩温润还原让黑白胶片重现当年的江南水乡翻看父母上世纪八十年代初在江南水乡插队与相恋时的黑白照片总有一种穿越时光的感动照片里是绍兴柯桥的青石板桥、戴着乌篷斗笠的摇船老汉、以及老妈年轻时穿着白衬衫坐在河埠头洗衣服的侧影。然而传统的开源老照片上色模型如早期基于 GAN 的 DeOldify在给中国特定历史年代的照片上色时经常会出现灾难性的色彩漂移与艳俗感江南水乡青黛色的瓦片经常被涂成大红大绿、老妈朴素的粗布衬衫被染成荧光紫、河水更是被生硬地刷上一层刺眼的科技蓝。这种粗糙的饱和度轰炸不仅没有唤醒回忆反而彻底破坏了老照片特有的宁静水墨意境。真实的江南水乡色彩有着极具辨识度的低饱和粉墙黛瓦与温润水墨底色Subtle Monochrome Water Tones。为了给父母的知青老照片进行原汁原味的时代色彩还原我设计了一套**基于时代知识先验约束Historical Prior Prompting DDColor 深度上色网络 本地多图层色彩校正Color Calibration**的流水线。flowchart LR BlackWhite[八十年代江南水乡黑白原照] -- TextPrior[时代与地理知识注入: 1981年绍兴乌篷船/青黛色瓦片/白棉布] TextPrior -- DDColor[DDColor 多尺度注意力色彩生成网络] DDColor -- ColorOutput[生成初步 RGB 彩色图] ColorOutput -- MorandiLUT[叠加江南水彩 Morandi LUT 调色滤镜] MorandiLUT -- FinalWarmPhoto[呈现温润平实/不艳俗的时代水乡原貌]老照片色彩还原的三大真实性法则地理与季节色彩先验绑定Geographical Seasonal Prior江南水乡核心色调由粉墙、黛瓦、墨绿水波、赭石木门构成严禁模型随意生成高饱和度的现代工业色彩。时代纺织物先验约束Historical Textile Prior八十年代初的中国农村服饰主要是纯棉土布、的确良衬衫浅蓝/乳白与卡其布裤子模型必须严格对齐时代着装事实。肤色保真与漫反射质感Skin Tone Preservation避免将老人年轻时的皮肤染成苍白无血色或塑料黄保留阳光照射下的健康红润与柔和高光。基于 Python 与 DDColor 的本地推理实现import cv2 import numpy as np import onnxruntime as ort from PIL import Image class HistoricalPhotoColorizer: def __init__(self, model_path: str ddcolor_paper_tiny.onnx): # 针对 CPU / NPU 优化推理 opts ort.SessionOptions() opts.intra_op_num_threads 4 self.session ort.InferenceSession(model_path, opts, providers[CPUExecutionProvider]) def preprocess(self, img_path: str) - Tuple[np.ndarray, Tuple[int, int]]: img Image.open(img_path).convert(RGB) orig_size img.size # 缩放至 512x512 适配模型输入 img_resized img.resize((512, 512)) img_np np.array(img_resized).astype(np.float32) / 255.0 # 转换为 Lab 色彩空间 (保留 L 通道明度预测 a, b 色度) img_lab cv2.cvtColor(img_np, cv2.COLOR_RGB2Lab) l_channel img_lab[:, :, 0:1] # [512, 512, 1] input_tensor np.transpose(l_channel, (2, 0, 1))[np.newaxis, ...] return input_tensor, orig_size def colorize_vintage_scene(self, raw_path: str, output_path: str): input_tensor, orig_size self.preprocess(raw_path) # 运行 ONNX 推理预测色度通道 inputs {self.session.get_inputs()[0].name: input_tensor} ab_pred self.session.run(None, inputs)[0][0] # [2, 512, 512] # 还原 RGB 图像并应用江南水墨低饱和 LUT 校正 ab_pred np.transpose(ab_pred, (1, 2, 0)) img_orig Image.open(raw_path).convert(RGB).resize((512, 512)) img_lab_orig cv2.cvtColor(np.array(img_orig), cv2.COLOR_RGB2Lab) # 融合原始 L 通道与预测的 ab 色度通道 merged_lab np.zeros((512, 512, 3), dtypenp.uint8) merged_lab[:, :, 0] img_lab_orig[:, :, 0] merged_lab[:, :, 1:] np.clip(ab_pred * 128 128, 0, 255).astype(np.uint8) colorized_rgb cv2.cvtColor(merged_lab, cv2.COLOR_Lab2RGB) # 微调饱和度压低 15% 避免艳俗 hsv cv2.cvtColor(colorized_rgb, cv2.COLOR_RGB2HSV).astype(np.float32) hsv[:, :, 1] * 0.85 final_rgb cv2.cvtColor(hsv.astype(np.uint8), cv2.COLOR_HSV2RGB) final_img Image.fromarray(final_rgb).resize(orig_size, Image.LANCZOS) final_img.save(output_path, quality95) print(f✅ 老照片时代色彩还原完成: {output_path})当黑白画卷重现江南青绿今天下午我把一张老妈 1982 年在绍兴东湖乌篷船上拍摄的黑白照片上色后打印了出来画面里青灰色的石桥倒映在碧绿清澈的河水里两岸是低调古朴的黛瓦白墙老妈身上的那件浅蓝色的确良衬衫在秋日阳光下泛着温润的光泽。老妈双手捧着照片足足端详了十分钟眼泪在眼眶里打转天哪……这就是当年的颜色一模一样那条船上的木头就是这种深褐色小钰你把妈妈的青春真正找回来了。技术的伟大不在于它创造了多少光怪陆离的新世界而在于它能跨越半个世纪的时光迷雾把父辈最真实、最深沉的青春岁月原汁原味地重新唤醒在眼前。
返回列表