OpenCV项目实战-深度学习去阴影-图像去阴影

news2024/11/22 9:59:21

往期热门博客项目回顾:

计算机视觉项目大集合

改进的yolo目标检测-测距测速

路径规划算法

图像去雨去雾+目标检测+测距项目

交通标志识别项目

yolo系列-重磅yolov9界面-最新的yolo

姿态识别-3d姿态识别

深度学习小白学习路线

//正文开始!

图像去阴影算法旨在改善图像质量并恢复阴影下物体的真实颜色与亮度
这对于许多计算机视觉任务如物体识别、跟踪以及增强现实等至关重要。以下是一些图像去阴影算法的基本概述:
在这里插入图片描述

  1. 基于亮度差算法

    • 这种方法通过比较图像中相邻像素或同一物体不同部分的亮度差异来检测阴影。假设在同一光照条件下,物体表面颜色应相对一致,若出现较大差异则可能被认为是阴影区域。通过统计分析或者阈值处理,可以区分出阴影并尝试通过某种方式(例如线性插值、邻域平均或其他修复策略)填充阴影区域以还原原始色彩。
  2. 空洞卷积与注意力融合的对抗式图像阴影去除算法

    • 这类算法采用深度学习方法,尤其是结合生成对抗网络(GANs)的技术。空洞卷积(dilated convolution)有助于捕捉更大范围的上下文信息,而注意力机制能帮助网络更加关注阴影和非阴影区域的关键特征。通过训练这样的网络模型,它可以学习如何从含有阴影的图像中生成无阴影的输出图像。
      在这里插入图片描述
  3. 局部或全局对比度调整

    • 对比度增强和直方图均衡化等技术也可以用于减轻阴影的影响,它们通过对整幅图像或局部区域进行亮度和对比度调整来改善阴影区域的表现。
  4. 形态学操作

    • 在某些简单情况下,可以使用形态学操作如最大滤波和最小滤波来估计和校正阴影。例如,在图像背景较浅的情况下,先对图像应用最大滤波以提取潜在的背景亮度,然后用得到的信息来推测并填补阴影区域。
  5. 基于物理模型的方法

    • 根据光源方向、阴影投射角度及场景深度信息建立物理模型,通过逆向渲染过程来估计阴影并进行去除。
  6. 多尺度分析和混合模型

    • 利用多尺度分析结合多种算法,比如小波变换、高斯金字塔等,能够在不同分辨率层级上分析和处理阴影,然后组合多个层级的结果以获得更准确的阴影去除效果。
      在这里插入图片描述

随着深度学习在图像处理领域的快速发展,越来越多的算法倾向于利用神经网络构建端到端的学习系统来解决阴影去除问题,这些方法通常能提供更优秀的效果,特别是在处理复杂场景和具有丰富纹理的图像时。然而,每种方法都有其适用场景和局限性,实际应用中往往需要根据具体需求和数据特性选择合适的算法。

代码

def parse_args():
    desc = "Pytorch implementation of DCShadowNet"
    desc = "Pytorch implementation of DCShadowNet"
    parser = argparse.ArgumentParser(description=desc)
    parser.add_argument('--phase', type=str, default='test', help='[train / test]')
    parser.add_argument('--dataset', type=str, default='SRD', help='dataset_name')
    #parser.add_argument('--datasetpath', type=str, default='/disk1/yeying/dataset/SRD', help='dataset_path')

    parser.add_argument('--datasetpath', type=str, default='SRD', help='dataset_path')

    parser.add_argument('--iteration', type=int, default=1000000, help='The number of training iterations')
    parser.add_argument('--batch_size', type=int, default=1, help='The size of batch size')
    parser.add_argument('--print_freq', type=int, default=1000, help='The number of image print freq')
    parser.add_argument('--save_freq', type=int, default=100000, help='The number of model save freq')
    parser.add_argument('--decay_flag', type=str2bool, default=True, help='The decay_flag')

    parser.add_argument('--lr', type=float, default=0.0001, help='The learning rate')
    parser.add_argument('--weight_decay', type=float, default=0.0001, help='The weight decay')
    parser.add_argument('--adv_weight', type=int, default=1, help='Weight for GAN')
    parser.add_argument('--cycle_weight', type=int, default=10, help='Weight for Cycle')
    parser.add_argument('--identity_weight', type=int, default=10, help='Weight for Identity')
    parser.add_argument('--dom_weight', type=int, default=1, help='Weight for domain classification')
    parser.add_argument('--ch_weight', type=int, default=1, help='Weight for shadow-free chromaticity')
    parser.add_argument('--pecp_weight', type=int, default=1, help='Weight for shadow-robust feature')
    parser.add_argument('--smooth_weight', type=int, default=1, help='Weight for boundary smoothness')
    
    parser.add_argument('--use_ch_loss', type=str2bool, default=True, help='use shadow-free chromaticity loss')
    parser.add_argument('--use_pecp_loss', type=str2bool, default=True, help='use shadow-robust feature loss')
    parser.add_argument('--use_smooth_loss', type=str2bool, default=True, help='use boundary smoothness loss')

    parser.add_argument('--ch', type=int, default=64, help='base channel number per layer')
    parser.add_argument('--n_res', type=int, default=4, help='The number of resblock')
    parser.add_argument('--n_dis', type=int, default=6, help='The number of discriminator layer')

    parser.add_argument('--img_size', type=int, default=256, help='The size of image')
    parser.add_argument('--img_h', type=int, default=480, help='The org size of image')
    parser.add_argument('--img_w', type=int, default=640, help='The org size of image')
    parser.add_argument('--img_ch', type=int, default=3, help='The size of image channel')

    parser.add_argument('--result_dir', type=str, default='results', help='Directory name to save the results')
    parser.add_argument('--device', type=str, default='cpu', choices=['cpu', 'cuda'], help='Set gpu mode; [cpu, cuda]')
    parser.add_argument('--benchmark_flag', type=str2bool, default=False)
    parser.add_argument('--resume', type=str2bool, default=True)
    parser.add_argument('--epoch', type=int, default=1)
    parser.add_argument('--use_original_name', type=str2bool, default=False, help='use original name the same as the test images')
    parser.add_argument('--im_suf_A', type=str, default='.png', help='The suffix of test images [.png / .jpg]')

运行流程

1.pip install -r requirements.txt
2将图片放在dataset\SRD\testA文件夹下

3.运行python main_test.py --dataset SRD --datasetpath  E:\001_code\DC-ShadowNet-Hard-and-Soft-Shadow-Removal-main_22\dataset\SRD\  --use_original_name False
E:\001_code\DC-ShadowNet-Hard-and-Soft-Shadow-Removal-main_22\dataset\SRD\是你的文件路径
4.results/SRD/500000查看结果

最后,计算机视觉、图像处理、毕业辅导、作业帮助、代码获取,远程协助,代码定制,私聊会回复!

call me :qq1309399183

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1564473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python+requests+Pytest+logging+allure+pymysql框架详解

一、框架目录结构 1)tools目录用来放公共方法存储,如发送接口以及读取测试数据的方法,响应断言 数据库断言 前置sql等方法;2)datas目录用例存储接口用例的测试数据,我是用excel来存储的数据,文件数据 图片数据等;3)testcases目录用来存放测试用例,一个python文件对应…

linux删除 buff/cache缓存

1.查看当前内存占用 free -h如图,缓存占用了将近9G,接下来进行清理 释放页缓存 echo 1 > /proc/sys/vm/drop_caches释放dentries和inodes echo 2 > /proc/sys/vm/drop_caches释放所有缓存 echo 3 > /proc/sys/vm/drop_caches再次查看&#…

uniapp创建opendb-city-china Schema文件后,如何导入城市的数据?

1.点击opendb-city-china后面的详情,进入到gitee代码仓库 2.下载如下图所示的data.json文件 3.将本地创建的opendb-city-china.schema.json上传到云端 4.点击导入json 如果直接将data.json导入会报错,如下图所示: 5.将data.json本来的数组对象&#…

物联网行业中,我们如何选择数据库?

在当今数字化潮流中,我们面对的不仅是海量数据,更是时间的涟漪。从生产线的传感器到金融市场的交易记录,时间序列数据成为了理解事物演变和趋势的关键。在面对这样庞大而动态的数据流时,我们需要深入了解一种强大的工具——时序数…

Flutter 开发学习笔记(3):第三方UI库的引入

文章目录 前言初始化程序Icon导入如何导入 Toast消息提示框引入简单封装简单使用 Charts图表导入新建pages文件夹存放page简单代码实现效果 总结 前言 Flutter已经发布了有10年了,生态也算比较完善了。用于安卓程序开发应该是非常的方便。我们这里就接入一些简单的…

经营数据分析怎么做?企业月度经营分析的思路与方法分享

企业经营分析是企业成功的关键之一,无论企业规模大小,都需要通过系统性的数据分析来指导经营决策。这一过程不仅仅是对集团大局数据的简单处理,还包括对市场、客户、生产、财务、运营、项目进展、人效等多个方面数据的全面审视。通过深入分析…

ubuntu-server部署hive-part4-部署hive

参照 https://blog.csdn.net/qq_41946216/article/details/134345137 操作系统版本:ubuntu-server-22.04.3 虚拟机:virtualbox7.0 部署hive 下载上传 下载地址 http://archive.apache.org/dist/hive/ apache-hive-3.1.3-bin.tar.gz 以root用户上传至…

Redis缓存设计与性能优化【缓存和数据库不一致问题,解决方案:1.加过期时间这样可以一段时间后自动刷新 2.分布式的读写锁】

Redis缓存设计与性能优化 缓存与数据库双写不一致 缓存与数据库双写不一致 在大并发下,同时操作数据库与缓存会存在数据不一致性问题 1、双写不一致情况 2、读写并发不一致 解决方案: 1、对于并发几率很小的数据(如个人维度的订单数据、用户数据等)&a…

六自由度Stewart控制系统matlab仿真,带GUI界面

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 六自由度Stewart平台控制系统是一种高精度、高稳定性的运动模拟装置,广泛应用于飞行模拟、汽车驾驶模拟、虚拟现实、精密定位等领域。其工作原理基于Stewart机构&a…

Python网络爬虫(一):HTML/CSS/JavaScript介绍

1 HTML语言 1.1 HTML简介 HTML指的是超文本标记语言:HyperText Markup Language,它不是一门编程语言,而是一种标记语言,即一套标记标签。HTML是纯文本类型的语言,使用HTML编写的网页文件也是标准的文本文件&#xff0c…

市场复盘总结 20240402

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 二进三: 进级率 50% 最常用的二…

【教程】Flutter 应用混淆

在移动应用开发中,保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具,帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆,并提供了相关的操作步骤和注意事项。 📝 摘要 本…

Android Telephony框架

目录 一、简介二、应用层(Application)三、框架层(Framework)四、本地 RIL 层(RIL)五、驱动层(Modem)六、整体框架 一、简介 无论手机发展到如何智能的程度,最关键和重要的功能仍然是通讯,具体来说就是打电话、发短信、上网功能的使用。而整个 Android …

uniapp-设置UrlSchemes从外部浏览器H5打开app

需求:外部浏览器H5页面,跳转到uniapp开发的原生app内部。 1、uniapp内部的配置: (1)打开manifest->App常用其他设置,如下,按照提示输入您要设置的urlSchemes: (2&am…

项目中 使用 spring cache redis 出现大量keys* 慢查询排查以及修复

前言 业务反馈 redis里有大量的慢查询 而且全是keys 的命令 排查 首先登录 阿里云查看redis的慢查询日志 如下 主要使用到redis cache的注解功能 分别是 CacheEvict 和 Cacheable 注意 CacheEvict 这个比较特殊 会进行驱逐缓存 说白就会删除缓存或者让缓存失效 第一时间想…

零基础入门多媒体音频(7)-AAOS audio

概览 Android Automotive OS (AAOS) 是基于核心的 Android 音频堆栈打造,以支持用作车辆信息娱乐系统。AAOS 负责实现信息娱乐声音(即媒体、导航和通讯),但不直接负责具有严格可用性和时间要求的铃声和警告。 虽然 AAOS 提供了信号…

AJAX——介绍

同步与异步 原生的AJAX 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"wi…

UE4_碰撞_碰撞蓝图节点——Get/Set Collision Object Type

一、get collision object type set collision object type 二、 使用方法&#xff1a; 通过对射线检测命中物体的碰撞中的对象类型object type进行判定来重新设置碰撞的对象类型&#xff0c;来更改碰撞响应的物体响应的方式。比方说一开始不让你进门&#xff0c;你可以通…

Ansys Zemax | 如何将光栅数据从Lumerical导入至OpticStudio(上)

附件下载 联系工作人员获取附件 本文介绍了一种使用Ansys Zemax OpticStudio和Lumerical RCWA在整个光学系统中精确仿真1D/2D光栅的静态工作流程。将首先简要介绍方法。然后解释有关如何建立系统的详细信息。 本篇内容将分为上下两部分&#xff0c;上部将首先简要介绍方法工…

OpenHarmony实战:Combo解决方案之ASR芯片移植案例

本方案基于 OpenHarmony LiteOS-M 内核&#xff0c;使用 ASR582X 芯片的 DEV.WIFI.A 开发板进行开发移植。作为典型的 IOT Combo&#xff08;Wi-FiBLE&#xff09;解决方案&#xff0c;本文章介绍 ASR582X 的适配过程。 编译移植 目录规划 本方案的目录结构使用 Board 和 So…