Diff-Shadow阴影去除
一、为什么要做“阴影去除”?
在计算机视觉(CV)领域,这种“带影子的图像”会给后续工作添麻烦:比如用AI识别图像里的物体时,影子可能被误认成“小石块”“水坑”;用AI跟踪行人时,影子的移动可能让AI以为“人在变形状”。所以,“阴影去除”的目标很简单:把图像里的影子去掉,让影子区域的亮度、颜色和周围正常区域保持一致,同时不破坏图像原本的细节。
二、过去的方法有什么缺点?
在这篇论文之前,研究者们主要用两种思路做阴影去除,但都有明显问题:
1. 基于Transformer的方法(比如ShadowFormer)
-
优点:能“看到”整个图像的全局信息,比如知道“树的影子”应该和“树旁边的草地”颜色相近,从而关联影子和非影子区域。
-
缺点:合成图像的能力比较弱。简单说,就是去掉影子后,填补的区域可能和周围衔接不自然,会留下明显的“边界痕迹”,甚至还有没去干净的“残留影子”。
2. 基于扩散模型的方法(比如ShadowDiffusion)
-
优点:合成图像的能力强,填补的区域细节很真实(扩散模型是目前AI画图的主流技术之一,擅长生成自然的图像内容)。
-
缺点:不会利用全局信息。比如处理“墙角的影子”时,它只看影子周围的一小块区域,不知道“墙角的亮度应该和整个墙面一致”,导致去掉影子后,新区域和周围的亮度差很大,显得很假;而且它只能处理小尺寸的图像块(类似“拼图小块”),直接处理整张图会出问题。
三、Diff-Shadow模型怎么解决这些问题?
论文提出的“Diff-Shadow”,本质是把两种方法的优点结合起来:用扩散模型的强合成能力保证细节真实,用全局信息保证亮度和颜色一致。具体靠三个关键设计实现:
1. RCA(帮两个分支“交流”的桥梁)
问题:局部分支只看小拼图,不知道“全局的亮度标准”,怎么让它参考全局分支的信息?
论文设计了“RCA模块”(重加权交叉注意力),作用类似“翻译官”,把全局分支的关键信息传给局部分支:
-
全局分支会先生成“没有影子的小图”,里面的“非影子区域”(比如草地、墙面)是关键参考。
-
RCA会“筛选”全局分支里的有用信息:只把“非影子区域”的亮度、颜色信息挑出来,传给局部分支。
-
局部分支拿到这些信息后,就知道“我处理的这个小拼图,应该和全局的非影子区域颜色一致”,避免出现“局部亮、全局暗”的情况。
2. GSS(解决“拼图拼不整齐”的问题)
问题:局部分支处理的是“小拼图”,最后要把这些小拼图拼成一张完整的图。如果直接拼,拼图之间会有明显的“缝隙”(边界痕迹),怎么办?
论文设计了“GSS策略”(全局引导采样),本质是“给每个拼图算一个‘融合权重’,让拼图边缘自然衔接”: -
第一步:先给每个小拼图打分。打分看两个维度:
- 亮度分:这个小拼图的亮度,和全局分支生成的“无影子小图”亮度差多少?差得越少,分数越高。
- 影子分:这个小拼图里,非影子区域占多少?非影子区域越多,分数越高(因为非影子区域的信息更可靠)。
-
第二步:根据分数给每个小拼图分配“融合权重”。分数高的拼图,在拼接时“话语权”更大,能更好地带动周围拼图的亮度,避免出现缝隙。
简单说,GSS就是让拼图在拼接时“互相妥协”,最终拼成一张没有边界痕迹、亮度一致的完整图。四、实验:这个模型到底好不好用?
论文用了三个公开的“阴影去除数据集”(ISTD、ISTD+、SRD,里面有大量“带影子的图”和对应的“无影子的标准图”)来测试,主要看三个指标(数值越优越好):
-
PSNR:衡量图像的清晰度,数值越高,图像越清晰(类似手机拍照的“分辨率”概念)。
-
SSIM:衡量恢复的图和标准图的相似度,数值越高,越接近真实的无影子图。
-
RMSE:衡量图像的亮度误差,数值越低,恢复的图和周围区域亮度越一致。
关键结果:
-
在ISTD数据集上,Diff-Shadow的PSNR从之前最好的32.33提升到33.69,意味着图像更清晰,亮度更一致。
-
看“实际效果”:对比之前的方法,Diff-Shadow去掉影子后,不会留下残留影子,也不会出现“局部亮、周围暗”的情况。比如处理“树枝的影子”时,之前的方法可能只去掉一部分影子,而Diff-Shadow能完全去掉,且地面纹理和周围一致。
-
适配任意尺寸:不管是小图(256×256像素)还是原图(640×480像素),Diff-Shadow都能处理,不会因为图变大就出问题。