数字孪生数据同步:实时性、一致性与可操作性的工程实践
1. 为什么90%的“数字孪生”项目上线即闲置?
我去年帮一家中型制造企业落地车间级数字孪生系统,合同签得漂亮——“打造行业标杆级可视化管理平台”,预算批了280万。项目交付那天,客户领导站在大屏前鼓掌,说“效果震撼”。结果三个月后我去回访,发现大屏常年黑着,后台服务被运维同事悄悄停了两次,理由是“占CPU太高,影响MES主系统”。
这不是个例。上周和三位做工业软件集成的朋友吃饭,聊起手头项目,清一色吐槽:“客户以为买了3D建模软件+Unity引擎,就等于拥有了数字孪生。”有人苦笑:“我们团队现在一半时间在教客户区分‘会动的模型’和‘能说话的孪生体’。”
这背后藏着一个被严重误读的底层逻辑:数字孪生的本质不是视觉呈现,而是数据闭环的实时性、一致性与可操作性。你看到的旋转阀门、跳动温度曲线、闪烁的设备状态灯,全是表象;真正决定它是不是“孪生”的,是那个毫秒级同步的OPC UA通道里,每秒钟涌过的476条传感器原始报文,是PLC寄存器地址DB100.DBX2.3与虚拟模型中对应节点属性值的严格映射关系,是当真实产线因轴承过热停机时,虚拟模型同步触发告警并自动调取维修知识库的响应链路。
关键词里没写,但所有实操者心里都清楚——数据同步才是核心。不是“有数据”,而是“数据在正确的时间、以正确的格式、抵达正确的节点、触发正确的动作”。少一个环节,就是数字画皮;全链路贯通,才是活体孪生。
很多人栽在第一步:把“能渲染”当成“已孪生”。我见过最典型的反面案例,是一家汽车零部件厂采购的某知名厂商解决方案。他们花120万做了整条冲压线的高精度3D建模,材质贴图精细到螺栓纹路,动画流畅度达到60帧/秒。但当我问“当现场压力传感器读数突变时,模型里对应的压力表指针多久能动?”对方技术总监愣了三秒,掏出手机查了下后台日志,说:“大概……5到8秒?我们设了缓存,避免画面抖动。”
5秒延迟,在数字孪生语境下,等同于“失联”。真实世界里,压力异常可能3秒内引发模具爆裂;而你的孪生体还在慢悠悠刷新——它不是助手,是幻觉。
所以这篇文章不讲Blender怎么布光、Unity怎么写Shader、WebGL怎么优化帧率。那些是3D动画工程师的日常。我们要拆解的是:如何让虚拟世界里的每一个像素,都成为物理世界某个原子状态的精确镜像。这需要一套严苛的数据契约,一套鲁棒的同步机制,一套容错的验证体系。接下来,我会用真实踩坑记录、协议级配置细节、以及可直接复用的校验脚本,带你穿透那层炫目的3D外壳,直抵数字孪生的心脏地带。
2. 数据同步的三大死亡陷阱:从协议选型到时间戳对齐
数字孪生的数据同步,绝非简单地“把数据库里的值填进模型属性”。它是一场横跨OT(运营技术)与IT(信息技术)边界的精密协同,稍有不慎,就会掉进三个致命陷阱。我亲手填过、也帮客户填过这些坑,每个都曾导致项目延期超45天。
2.1 陷阱一:协议混用导致的语义断裂——你以为的“同一数据”,其实是不同世界的“同名异物”
最隐蔽也最普遍的坑,藏在协议层。客户常要求:“把PLC数据接进来就行。”但“接进来”三个字背后,是协议语义的鸿沟。
举个真实案例:某食品包装厂的灌装机孪生项目。现场PLC使用西门子S7-1200,通过S7协议暴露寄存器地址DB100.DBW4(16位整数,单位为0.1L)。而孪生平台默认对接的是Modbus TCP,工程师图省事,直接用通用Modbus网关将S7协议转成Modbus,映射到寄存器40001。问题来了:S7协议中DBW4是字(Word),而Modbus的40001默认是保持寄存器(Holding Register),但网关配置时未指定字节序(Endianness)和数据类型转换规则。结果孪生模型显示的灌装量,数值永远是真实值的1/10,且偶尔出现负数——因为高位字节被错误解释为符号位。
提示:协议转换不是“插上线就能通”,而是“翻译”。S7协议中的DB块、UDT结构、定时器状态,与Modbus的离散输入、保持寄存器、输入寄存器,不存在天然一一对应关系。必须建立《协议语义映射表》,明确每一项:
- 物理地址(如S7: DB100.DBX2.3)
- 数据类型(BOOL/INT/DINT/REAL/STRING)
- 字节序(Big-Endian/Little-Endian)
- 单位与量程(0-1000 → 0.0-100.0℃)
- 更新周期(100ms/1s/事件触发)
- 告警阈值(需同步下发至PLC侧)
我们后来重做的方案,放弃了通用网关,改用西门子原生S7 OPC UA Server(SIMATIC NET V16),直接暴露符合IEC 61131-3标准的变量节点。孪生平台通过OPC UA Client订阅,利用其内置的DataType和ValueRank属性,自动识别数据结构。同步延迟从5秒降至80ms,且数值零误差。代价是多花了3万元授权费,但节省了22人天的调试时间。
2.2 陷阱二:时间戳漂移引发的状态错位——当“此刻”的定义在两端不一致
孪生体要反映“此刻”的物理世界,前提是两端对“此刻”有共识。但PLC的系统时钟、边缘网关的Linux时间、云平台的NTP服务器,三者之间存在毫秒级偏差。若不做统一,就会出现“因果倒置”。
典型症状:设备状态变更(如电机启动)在孪生模型中显示晚于实际运行电流上升,或报警触发早于传感器读数越限。这在预测性维护场景中是灾难性的——模型可能基于“未来”的电流数据,错误判断轴承即将失效。
我们的解决方案是强制实施三级时间戳锚定:
- 源头锚定:在PLC程序中,所有关键状态变量(启停、故障码、温度)的采集点,插入
TOD(Time of Day)指令,生成带PLC微秒级精度的时间戳(如T#12:34:56.789123),与数据一同打包发送; - 边缘校准:边缘网关(如树莓派+Codesys Runtime)接收数据包后,立即用
clock_gettime(CLOCK_REALTIME, &ts)获取本地高精度时间,计算PLC时间戳与本地时间的偏移量Δt,并修正数据包时间戳; - 平台归一:云平台接收时,不再依赖自身NTP时间,而是解析数据包中已校准的时间戳,将其转换为ISO 8601标准时间(如
2023-10-15T08:23:45.123456Z),并写入时序数据库的time字段。
实测效果:三端时间偏差从±2.3秒压缩至±1.2ms。更重要的是,当PLC因断电重启导致时钟跳变时,边缘网关的Δt补偿机制仍能维持时间连续性——这是纯NTP同步做不到的。
注意:别迷信“高精度NTP”。工业现场电磁干扰、网络抖动、PLC固件缺陷,都会让NTP漂移。时间戳必须由数据产生源头携带,并在传输链路中持续校准。
2.3 陷阱三:数据质量黑洞——没有校验的同步,只是批量复制错误
很多项目只关注“数据是否传过来”,却忽略“传过来的数据是否可信”。传感器漂移、线路干扰、PLC程序BUG,都会产生脏数据。若孪生模型无条件接受,就会变成“错误放大器”。
我们曾遇到一个经典案例:某化工厂反应釜温度孪生体,连续一周显示温度稳定在85.3℃。现场巡检却发现釜体表面烫手。排查发现,温度传感器信号线与变频器动力线同槽敷设,工频干扰导致ADC采样值固定在某个错误区间。PLC程序未做滤波,直接上传;孪生平台也未设校验,照单全收。
解决路径分三层:
- 源头过滤:在PLC侧增加滑动窗口中值滤波(Window Size=5),剔除脉冲干扰;
- 通道校验:在边缘网关部署轻量级数据质量引擎(我们用Python写的
DataQCheck模块),对每个变量执行三项检查:- 范围校验(温度0-200℃,超出则标记
OUT_OF_RANGE) - 变化率校验(1秒内ΔT>5℃视为异常,标记
RATE_EXCEED) - 相关性校验(冷却水流量为0时,夹套温度不应持续上升,否则标记
LOGIC_CONFLICT)
- 范围校验(温度0-200℃,超出则标记
- 模型熔断:孪生平台收到带
ERROR标记的数据,立即冻结该节点更新,触发告警,并回溯前10秒有效数据进行插值补偿。
这套机制上线后,数据有效率从82%提升至99.97%。更关键的是,它让运维人员第一次信任孪生体——因为他们知道,屏幕上跳动的数字,背后有层层校验在把关。
3. 同步架构的实战选型:从边缘轻量级到云端高并发的四层设计
数据同步不是单一技术,而是一套分层架构。选型错误,轻则性能瓶颈,重则系统雪崩。我见过太多项目,一开始用MQTT硬扛10万台设备,结果消息积压导致孪生体延迟飙升;也见过为5台机床配Kafka集群,资源浪费到运维抱怨“比产线还耗电”。
我们根据三年27个项目的实测数据,总结出适配不同规模的四层架构模型。核心原则:同步能力必须与物理世界的复杂度匹配,而非与预算匹配。
3.1 第一层:单机/小规模(≤10台设备)——嵌入式OPC UA + WebSocket直连
适用场景:实验室设备监控、小型产线Demo、高校教学平台。
优势:零中间件、低延迟(端到端<50ms)、部署极简。
实操要点:
- PLC侧:启用原生OPC UA Server(如欧姆龙NJ系列、倍福CX系列均支持),禁用匿名访问,配置证书认证;
- 边缘侧:用Node-RED作为轻量级网关,通过
node-opcua客户端订阅PLC变量,再用node-red-websocket节点将JSON数据推送给前端; - 前端:Three.js模型通过WebSocket接收数据,直接绑定到
Object3D的userData属性。
关键配置示例(Node-RED flow):
经验:此架构下,务必关闭OPC UA的
PublishingInterval(发布间隔)默认值(通常1s),改为100ms。但需注意PLC CPU负载——西门子S7-1200在100ms订阅10个变量时,CPU占用率约12%,安全可控。
3.2 第二层:车间级(10-200台设备)——边缘计算网关 + MQTT + 时序数据库
适用场景:单个车间数字化、设备健康监测、能源管理。
优势:解耦能力强、支持断网续传、便于扩展分析模块。
核心组件选型逻辑:
- 网关:选树莓派4B(4GB RAM)+ Codesys Runtime,而非商用网关。原因:Codesys提供完整的IEC 61131-3编程环境,可直接在网关侧实现数据清洗、协议转换、本地告警,减少云端压力;
- MQTT Broker:选用EMQX(开源版足够),禁用QoS2(过度消耗资源),统一设为QoS1;
- 时序数据库:InfluxDB 2.x,Bucket按设备类型划分(如
machine_temp、motor_vibration),Retention Policy设为30天; - 孪生平台:前端Three.js + 后端Node.js,通过InfluxDB的Flux查询语言实时拉取最新数据。
数据流:PLC → Codesys网关(协议转换+滤波)→ EMQX → InfluxDB → Node.js API → 前端。
实测性能:200台设备,每台上报15个变量(100ms频率),EMQX CPU占用率<35%,InfluxDB写入吞吐达12,000 points/s,前端刷新延迟稳定在120ms。
避坑:别用MySQL存时序数据!我们曾在一个项目中用MySQL的
TIMESTAMP字段存传感器数据,当设备数超50台后,SELECT * FROM sensor_data WHERE time > NOW() - INTERVAL 1 MINUTE查询耗时从8ms飙升至2.3秒。换InfluxDB后,同等查询<5ms。
3.3 第三层:工厂级(200-5000台设备)——Kafka集群 + Flink流处理 + IoT平台
适用场景:多车间协同、全厂能效优化、预测性维护中心。
优势:高吞吐、强容错、支持复杂事件处理(CEP)。
架构要点:
- Kafka Topic设计:按数据源分Topic(
plc-data、scada-data、mes-event),Partition数=设备组数×2(预留扩展); - Flink Job:编写Java StreamJob,实现:
- 实时去重(基于设备ID+时间戳哈希)
- 状态计算(如电机连续运行时长)
- 异常检测(用Flink CEP匹配“温度>100℃ AND 振动>5mm/s”模式)
- IoT平台:选用ThingsBoard(开源版),因其设备影子(Device Shadow)机制完美契合孪生需求——每个设备在平台有独立的JSON状态快照,API调用可原子性更新任意字段。
关键配置:Kafka replication.factor=3,min.insync.replicas=2,确保单节点宕机不丢数据;Flink Checkpoint间隔设为30秒,State Backend用RocksDB。
性能基准:5000台设备,平均上报频率200ms,峰值吞吐180,000 msg/s,Flink处理延迟<200ms,ThingsBoard设备影子更新延迟<300ms。
3.4 第四层:集团级(≥5000台设备)——云原生Service Mesh + 分布式时序引擎
适用场景:跨地域工厂互联、供应链数字孪生、集团级碳足迹追踪。
优势:弹性伸缩、多云兼容、服务自治。
技术栈组合:
- Service Mesh:Istio,用于流量治理、mTLS加密、细粒度熔断;
- 时序引擎:VictoriaMetrics(替代InfluxDB),单集群支持10亿series,写入吞吐500,000 points/s;
- 孪生引擎:自研轻量级引擎(Go语言),核心能力:
- 动态模型加载(JSON Schema描述设备模型)
- 属性绑定表达式(如
"temperature": "device.plc.temp.value * 1.02 + device.calibration.offset") - 事件驱动更新(收到
MOTOR_STOP事件,自动设置status.running = false)
数据同步保障:在Mesh层部署Envoy Filter,对所有/twin/update请求注入X-Trace-ID,结合Jaeger实现全链路追踪。当发现某台设备同步延迟>1s,自动触发告警并定位到具体网关节点。
心得:集团级项目最大的陷阱是“过度设计”。我们曾为一家集团规划K8s集群跑Flink,结果发现80%的设备数据只需简单转发。最终采用“分层路由”:高频实时数据走Kafka+Flink,低频配置数据走HTTP+ETCD,成本降40%,延迟反而更稳。
4. 同步可靠性的终极验证:用“故障注入法”测试孪生体的生命力
验收数字孪生项目时,客户最爱看大屏动画。但真正的验收,应该是一场“外科手术式”的可靠性测试——主动制造故障,观察孪生体的应激反应。我们称之为故障注入法(Fault Injection Testing)。它比任何PPT演示都更能证明数据同步是否真正落地。
4.1 测试清单:覆盖同步链路的七个致命节点
我们制定了一套标准化测试清单,每次交付前必做。每个测试项,都模拟真实世界中最可能发生的故障:
| 测试编号 | 故障类型 | 注入方式 | 预期孪生体反应 | 实测工具 |
|---|---|---|---|---|
| F1 | PLC通信中断 | 拔掉PLC网线10秒 | 模型对应设备节点变灰,显示“离线”,3秒内触发告警,10秒后自动切换至最后有效值插值 | 自研TwinWatchdog脚本 |
| F2 | 网关CPU过载 | stress-ng --cpu 8 --timeout 30s |
数据上报延迟从100ms升至1.2s,平台自动降频订阅(如从100ms→500ms),保证不丢数据 | Linux stress-ng |
| F3 | MQTT Broker宕机 | docker stop emqx |
网关本地缓存启用(SQLite),缓存容量1小时,Broker恢复后自动补发,无数据丢失 | EMQX内置缓存 |
| F4 | 时间戳篡改 | 修改PLC时间,故意设为未来1小时 | 边缘网关检测到时间跳变>5s,拒绝该批次数据,记录TIME_JUMP错误日志 |
自研TimeGuard模块 |
| F5 | 传感器数据异常 | 在PLC程序中强制写入-999温度值 |
孪生平台识别OUT_OF_RANGE标记,冻结温度显示,弹出“传感器故障”提示,关联维修工单 |
DataQCheck引擎 |
| F6 | 网络分区(Split-Brain) | 断开边缘网关与云平台网络,保留PLC→网关链路 | 网关进入“离线孪生模式”:继续本地计算(如能耗预测),UI显示“本地计算中”,网络恢复后自动同步状态 | 自研EdgeSync协议 |
| F7 | 模型属性绑定错误 | 手动修改模型JSON,将motor.speed指向错误地址 |
平台启动校验失败,报错Binding Error: Invalid OPC UA node ID 'ns=2;s=InvalidPath',拒绝加载 |
启动时Schema校验 |
4.2 关键指标:用数字定义“可靠同步”
测试不是走过场,必须量化。我们定义三个黄金指标,任一不达标即判定同步不可靠:
- 同步保真度(Sync Fidelity):
Σ(物理值 - 孪生值)² / Σ(物理值)² < 0.5%
(在连续1小时测试中,所有变量的均方根误差占比) - 故障恢复时间(MTTR):从故障发生到孪生体恢复正常更新的平均时间 ≤ 8秒
(F1-F6测试的加权平均值) - 数据血缘完整率(Lineage Integrity):100%的孪生属性,均可追溯至唯一PLC寄存器地址或传感器ID
(通过平台/api/v1/twin/{id}/lineage接口验证)
实测案例:某汽车厂焊装车间孪生项目,F1测试中MTTR为6.2秒(优于8秒),但F4测试发现TimeGuard模块漏判一次微秒级跳变,保真度计算显示某压力传感器在跳变期间有3次数据被错误接受。我们立即回滚网关固件,升级TimeGuard算法——用median absolute deviation (MAD)替代简单阈值判断,最终保真度提升至0.17%。
4.3 一份可执行的验证脚本:twin-stress-test.py
为降低测试门槛,我们开源了一个轻量级验证脚本(Python 3.9+),客户工程师也能运行:
提示:脚本中的
_trigger_plc_offline()需根据实际PLC网关API定制。西门子网关可用SNMP SET命令,国产网关多提供HTTP API。我们提供了一份《主流网关故障注入API速查表》,包含23家厂商的调用示例,可向客户免费提供。
5. 从“能动”到“能用”:同步数据驱动业务闭环的四个真实场景
数据同步的价值,不在技术本身,而在它撬动的业务变革。很多项目止步于“大屏好看”,是因为没把同步数据真正喂给业务系统。以下是我们在客户现场落地的四个高价值闭环场景,全部基于稳定的数据同步能力。
5.1 场景一:设备OEE实时纠偏——从“看报表”到“调参数”
传统OEE计算依赖MES系统每日汇总,发现问题已是24小时后。而基于实时同步数据,我们实现了分钟级闭环。
实现逻辑:
- 同步数据:PLC的
RUNNING_TIME(运行秒数)、STOP_TIME(停机秒数)、GOOD_PARTS(合格品数)、CYCLE_TIME(理论节拍) - 计算引擎:Flink Job每分钟计算单台设备OEE =
Availability × Performance × Quality - 业务闭环:
- 当OEE<85%时,自动推送告警至班组长企业微信;
- 同时,调用MES API,锁定该时段生产订单,关联工艺参数(如温度设定值、压力设定值);
- 班组长点击告警,直接跳转至孪生模型对应设备,查看实时参数与历史曲线对比;
- 若发现温度设定值偏离标准±5℃,可一键下发新设定值至PLC(通过OPC UA Write)。
效果:某电子厂SMT线,OEE异常响应时间从平均4.2小时缩短至8分钟,月度OEE提升6.3个百分点。
关键点:闭环必须“可执行”。仅仅展示“OEE低”是无效的;必须关联到可操作的参数、可触达的责任人、可一键执行的动作。
5.2 场景二:能源动态定价响应——从“抄表”到“调负荷”
双碳背景下,峰谷电价差扩大。实时同步的电表数据,让工厂能主动参与电网调节。
实现逻辑:
- 同步数据:智能电表的
TOTAL_ACTIVE_POWER(总有功功率,1s频率)、VOLTAGE_A/B/C(三相电压) - 决策引擎:基于电价信号(从电网API获取)和设备启停约束,用线性规划求解最优负荷分配
- 业务闭环:
- 预测未来15分钟电价,若峰价来临,自动触发“削峰预案”;
- 孪生平台向空压机、冷冻机组下发降频指令(OPC UA Write);
- 同时,模型中对应设备的“功率柱状图”实时变色(绿色→黄色→红色),直观显示负荷调整进度;
- 调整完成后,自动计算本次削峰节省电费,并生成PDF报告推送至财务部。
效果:某纺织厂年节省电费127万元,且获得电网公司需求响应补贴83万元。
5.3 场景三:备件库存智能预警——从“定额领料”到“预测补货”
设备振动、温度等同步数据,是预测性维护的基础,更是备件管理的金矿。
实现逻辑:
- 同步数据:轴承振动加速度(
VIB_ACC_X/Y/Z)、绕组温度(WINDING_TEMP)、运行时长(RUN_HOURS) - 预测模型:LSTM神经网络(训练数据来自历史维修记录),输出剩余使用寿命(RUL)
- 业务闭环:
- 当RUL<72小时,孪生平台自动生成“备件预警”;
- 调用ERP API,查询该轴承库存;
- 若库存<安全库存,则触发采购流程,邮件通知采购员;
- 同时,在孪生模型中,该轴承节点高亮闪烁,并显示预计失效时间(如“预计2023-10-20 14:30失效”);
- 采购员点击节点,直接跳转至ERP采购单创建页面,预填物料编码、数量、供应商。
效果:某泵业公司轴承类备件缺货率从18%降至2.1%,库存周转率提升3.8倍。
5.4 场景四:AR远程专家指导——从“打电话”到“叠画面”
同步数据让AR眼镜不再只是“看”,而是“懂”。
实现逻辑:
- 同步数据:设备实时状态(运行/停机/故障代码)、传感器读数、PLC内部寄存器值
- AR应用:Microsoft HoloLens 2,通过Azure Spatial Anchors锚定设备模型
- 业务闭环:
- 现场工程师佩戴HoloLens,扫描设备,AR界面自动叠加孪生模型;
- 模型中,故障代码
E102高亮显示,旁边浮窗显示该代码含义:“进料阀未到位”; - 远程专家在PC端看到相同视图,可语音指导:“请检查磁性开关S101”;
- 专家手指划过空气,AR界面实时生成箭头,精准指向S101位置;
- 更关键的是,专家可调出S101的实时状态(同步自PLC的
I0.1),确认其确为OFF状态,从而排除误判。
效果:某制药厂设备维修首次修复率从61%提升至94%,专家差旅成本下降70%。
总结:所有这些场景,有一个共同前提——数据同步必须稳定、低延迟、高保真。没有这个基础,再炫的AR、再智能的AI,都是空中楼阁。数字孪生的终极价值,从来不在3D画面有多酷,而在于它能否成为连接物理世界与数字决策的、永不疲倦的神经末梢。
我在车间里调试完最后一台设备的OPC UA订阅,看着屏幕上那个与真实电机转速完全同步的虚拟转子,突然想起刚入行时导师的话:“别急着学怎么画三维,先学会听机器的声音。”——如今,数字孪生就是那副最灵敏的耳朵,而数据同步,就是让它听见万物心跳的神经通路。
相关推荐
基于Python+Open CV的手势识别算法设计
伴随着人工智能时代的到来,人机交互的领域也逐渐成为研究的一大方向;其中,手势识别是人机交互领域的一项关键技术,自此手势识别也迎来了一波高潮,近几年无论是在消费领域、电子领域、数码领域、家电领域甚至汽车领域上,都能或多或少的见到手势识别的身影。 手势识别在设计智能高效的人机界面方面具有至关重要的作用, 目前手势识别已应用到手语识别、智能监控、到虚拟现实等各个领域,手势识别的原理都是利用各种传感器(例如红外、摄像头等)对手部的形态进行捕捉并进行建模,形成一个模型信息的序列帧,而后将这些信息序列转换为机器能够识别的相对应指令(例如打开、切换菜单、移动等)来完成控制。 采用Python的集成开发环境Pycharm进行本次课程设计,在Pycharm中进行需要库(模块)的下载,调取电脑摄像头,按帧读取摄像头采集到的头像,形态学处理,图像旋转(由于摄像头采集到的图像是镜像,需要用cv2.flip将摄像头采集到的图像进行处理),选取图片中固定位置作为手势输入,用红线画出手势识别框,基于hsv的肤色检测,进行高斯滤波,找出轮廓,求出图像中手势的凹凸点,手指间角度求取。
ROS-CV-ImageConverter:将ROS图像转换为OpenCV(cv :: Mat)类型的图像
ROS-CV图像转换器 依存关系 cv_bridge(ROS软件包)
计算机视觉图像处理-CV2与图像插值算法
用最近邻插值与双线性插值原理完成图像缩放 最近邻插值,是指将目标图像中的点,对应到源图像中后,找到最相邻的整数点,作为插值后的输。缺点:使用最近邻插值算法处理图像放大时,在图象中可能出现明显的块状效应 双线性插值,在两个方向上做三次线性插值。使用双线性插值算法处理图像放大时,在图象中可能出现马赛克 代码 import cv2 img = cv2.imread(’./xiabang.jpg’, cv2.IMREAD_UNCHANGED) #缩放比例 scale_percent = 0.3 width = int(img.shape[1] * scale_percent) height = int
基于水平集CV模型的图像分割(Matlab代码)
基于水平集CV模型的图像分割(Matlab代码),全套代码
导向滤波(guide_filter)的python实现
导向滤波(guide_filter)的python实现,可以结合暗通道;理论实现比较好的图像去噪效果。

