一种简单的数字图像复制粘贴(Copy—Move)检测

本文总结了实现图像复制粘贴(Copy—Move)检测的方法,包括关键点提取、匹配和显示步骤。详细介绍了SIFT算法的核心部分,通过提取关键点、计算特征描述子并进行匹配来检测图像中的复制粘贴操作。

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

2022-08-17更新:开源代码见copy_move(包含原作者实现链接)

一、概述

最近看了A SIFT-Based Forensic Method for Copy–MoveAttack Detection and Transformation Recovery,并按文中的方法实现了一个简单版的图像复制粘贴(Copy—Move)检测,在此做个总结。

下面是个效果图:

这里写图片描述

二、检测步骤

1、提取SIFT关键点和特征描述子;

2、关键点匹配;

3、结果显示。

三、详细步骤

1、提取SIFT关键点和特征描述子

提取SIFT的关键点:

P = ( p 1 , p 2 , p 3 , . . . , p n ) P=\left( { p }_{ 1 },{ p }_{ 2 },{ p }_{ 3 },...,{ p }_{ n } \right) P=(p1,p2,p3,...,pn)

及其对应的特征描述子:

F = ( f 1 , f 2 , f 3 , . . . , f n ) F=\left( { f }_{ 1 },{ f }_{ 2 },{ f }_{ 3 },...,{ f }_{ n } \right) F=(f1,f2,f3,...,fn)

我参考的是SIFT原作者写的算法。

其对应的函数体为:

function [imageRGB, descriptors, keys] = sift(imageFile)
%%功能:读取一幅图像,并返回它的SIFT关键点信息
%  输入:
%     imageFile: 图片文件名
%
%  输出: 
%     imageRGB: 原始图像矩阵
%     descriptors: 一个kx128大小的矩阵; k是找到的关键点个数;每一行都为单位向量
%     keys:一个kx4大小的矩阵, 每行包括关键点的四个值 (行数,列数,关键点尺度半径,方向角)

另外,关于SIFT的其他东西也可参考SIFT特征提取分析

2、关键点匹配

该步是本篇的核心部分(虽然很简单,呵呵)。主要根据各特征描述子之间的欧氏距离获取相互匹配的关节点。

a、计算描述子 f 1 { f }_{ 1 } f1与其它 ( n − 1 ) (n-1) n1个描述子之间的距离(一般为欧氏距离),最后得到:

D = ( d 1 , d 2 , d 3 , . . . , d ( n − 1 ) ) D=\left( { d }_{ 1 },{ d }_{ 2 },d_{ 3 },...,{ d }_{ (n-1) } \right) D=(d1,d2,d3,...,d(n1))

b、将向量D按从小到大的顺序排列,之后得到:

D ′ = ( d 1 ′ , d 2 ′ , d 3 ′ , . . . , d ( n − 1 ) ′ ) { D }^{ ' }=\left( { d }_{ 1 }^{ ' },{ d }_{ 2 }^{ ' },{ d }_{ 3 }^{ ' },...,{ d }_{ (n-1) }^{ ' } \right) D=(d1,d2,d3,...,d(n1))

如果: d 1 ′ / d 2 ′ < T { d }_{ 1 }^{ ' }/{ d }_{ 2 }^{ ' }<T d1/d2<T,那么可以得到与描述子 f 1 { f }_{ 1 } f1匹配的关键点 p j { p }_{ j } pj(此时的 d 1 ′ 对 { d }_{ 1 }^{ ' }对 d1应描述子 f 1 { f }_{ 1 } f1与描述子 f j { f }_{ j } fj之间的距离),并将关键点 p 1 { p }_{1 } p1加入到点集 A A A中,将关键点 p j { p }_{ j } pj加入到点集 B B B中;

否则:进行步骤c。

c、对于描述子 f 2 { f }_{ 2} f2~ f n { f }_{ n } fn,重复步骤a、b。

其对应的主要代码如下:

%循环找匹配点
    for i = 1 : size(des,1)
        %求行向量des(i,:) 与矩阵des中每一行向量的欧几里得距离
        distance_I_other = distanceVectorMatrix(des(i,:),des);
        %将算的结果按从小到大排序
       [vals,indx] = sort(distance_I_other);  
        %求匹配特征点
       if (vals(2) < threshold * vals(3))
          match(i) = indx(2);%如果特征点i与其它特征点的最近       距离和次最近距离的比值小于阈值threshold的话,
       else                         %就认为这个最近距离的特征点 indx(2)与特征点i匹配。
          match(i) = 0;         %这里舍去了indx(1)是因为该点代表特征点i自身
       end
    end

3、将点集 A A A与点集 B B B中对应的点用线连起来即可。

该步主要利用MATLAB中的函数”line“

其对应的主要代码如下:

    for i = 1: size(des,1)
      if (match(i) > 0)
          %line([起点横坐标,终点横坐标],[起点纵坐标,终点纵坐标],...),
        line([loc(i,2) loc(match(i),2)], [loc(i,1) loc(match(i),1)], 'Color', 'c');
      end
    end

最后,再来两个实例测试一下:

这里写图片描述
这里写图片描述

说明:

1、除了步骤一中与SIFT相关的代码,其他所有都是本人原创,并且也做了个简单的界面;

2、对于上述文章的高级版本随后有时间再专门写一篇。

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

我们把同一标的(昆仑万维,现价 43.20 元,2026-07-31 收盘)交给三套系统,各出一份独立分析: **C 报告(CoordClaw 基于管理学多智能体系统)**——投研级。它由五个角色构成:周婷整合撰写、李静出基本面、王芳出技术面、赵明出风险、陈默做 PM 终审。最终产物是一份 38 项分级风险清单(P0×4 / P1×12 / P2×12 / P3×6 / 尾部×4)、双源交叉验证的财务数据(EM/Sina 差异 <0.01%)、严格的口径纪律,以及一份原样保留的"待核实"清单。结论冷冰冰:高风险,不建议参与。 **D 报告(DeepSeek)**——信息整理级。它把"4+3 AGI 战略"、天工 AI、Opera 浏览器、StarMaker 拆得很漂亮,核心财务数据(营收 81.98 亿、归母 -15.93 亿)也没算错。但整篇没有技术面、没有量化风控,更关键的是——它完全没提实控人已减持 75%、质押状态未知、净现金仅 15.19 亿且续航只有 1.26~1.81 年这些要命的负面。这是典型的"选择性呈现"。 **K 报告(Kimi)**——以对比评估的方式呈现。它搭起"数据准确性 / 分析维度 / 结论合理性"的三维框架,把几份材料放在一起对照,给出各自的强弱判定。它的维度意识比 D 报告更自觉,但作为一份独立分析,它对"评估方法本身的信度"交待不足,部分引用的核对也不够彻底。 结果两家的结论高度一致。C 报告(多智能体)被评投研级、居首;D 报告(DeepSeek 自己写的)被评信息整理级、居中;K 报告(Kimi 自己那份)维度较全但核验深度有限,排在两者之间。DeepSeek 的那份评估把 C 给了五星、D 三星、K 四星;Kimi 的那份评估也独立地把最高分给了 C。
问题现象 - 同一张 TF 卡/SD 卡在其他电脑上能正常识别,插到本机却只"响一声",资源管理器里不显示盘符; - 磁盘管理里能看到磁盘,但显示为灰色 / RAW / 无盘符; - 插入 U 盘、读卡器后偶尔能显示,重启或更换卡片后又消失; - 使用 diskpart、mountvol 等命令时系统卡住无响应。 ## 问题根源 经排查,这类问题通常不是 TF 卡损坏,而是 Windows 存储子系统与本机读卡器/驱动之间的兼容性故障,主要包括: 1. **盘符未分配** —— 卷已被系统识别,但没有挂载点,因此资源管理器不显示; 2. **USB 幽灵设备残留** —— 系统里残留 `Disconnected` 状态的 USBSTOR 设备记录,阻塞新设备枚举; 3. **USB 选择性暂停(Selective Suspend)** —— Windows 空闲时给读卡器断电,导致识别不稳定; 4. **automount 被关闭或失效** —— 新插入的卷无法自动分配盘符; 5. **存储堆栈挂起** —— 残留的 diskpart 进程锁死存储服务。 ## 解决方案(一键永久修复) 本项目是一个 **Codex Skill + 一键安装器**,自动完成以下修复: - 启用系统自动挂载(automount enable / scrub) - 清理 Disconnected 幽灵 USB 设备 - 永久禁用 USB 选择性暂停(防读卡器被断电) - 自动为所有无盘符的可移动卷分配盘符 - 注册**开机守护任务**:每次开机自动执行以上修复,彻底告别手动操作 ## 使用方法 ```powershell # 在其他电脑上(Windows 10/11): # 1. 下载本项目 # 2. 右键 install.bat → 以管理员身份运行(或直接双击后点"是")
内容概要:本文档是PCI-SIG发布的工程变更通知(ECN),标题为“DSM Function Revision Clarifications”,发布于2020年2月12日,旨在澄清PCI固件规范3.2版本及后续ECNs中关于ACPI设备特定方法(_DSM)的修订规则。文档明确了_DSM函数中“Revision ID”参数的有效取值范围,规定当前版本的最高修订号为6,并详细说明了当新增或修改函数时,如何统一更新修订值。同时,文档修正了此前不一致的应用方式,确保未来对_DSM接口的扩展具有一致性和向后兼容性,并列出所有已定义_DSM函数的初始与当前有效修订号,涵盖PCI Express插槽信息、电源管理、延迟容忍报告等功能。此外,还描述了操作系统平台(OSPM)与系统固件之间如何协商使用正确的修订版本号。; 适合人群:从事固件开发、系统架构设计、ACPI或PCI Express相关技术工作的工程师,尤其是参与操作系统与硬件交互层开发的技术人员。; 使用场景及目标:①指导开发者正确实现_DSM函数的版本控制机制;②帮助固件和操作系统开发者确保对_DSM接口的支持符合规范一致性要求;③为支持Runtime Device Power Management和Downstream Port Containment等特性的系统提供标准化依据; 阅读建议:此文档属于技术规范类文件,建议结合PCI Firmware Specification 3.2全文及其他相关ECN一起阅读,重点关注Table 4-7及各_DSM函数的参数定义,理解版本协商流程及其对系统行为的影响。
内容概要:本白皮书系统分析了2026年中国体重管理连锁加盟行业的发展现状与未来趋势,以“伊简梅”品牌为深度案例,从政策环境、市场规模、消费趋势、行业格局、商业模式、技术体系、合规能力及盈利模型五个维度展开研究。报告指出,行业正处于监管趋严与需求升级的双重驱动下,迎来从野蛮生长向高质量发展的转型期。伊简梅凭借“中医辨证+六体打造”的核心技术体系、“零品牌授权费+设备权益金”的利益绑定模式,以及完善的八大帮扶体系,在高闭店率的行业中实现了年均闭店率不足5%、成交率93%、复购率48.7%的优异表现,展现出较强的可复制性与投资价值。; 适合人群:有意进入体重管理行业的女性创业者、社区创业者、美业转型者、副业试水者及区域代理商;尤其适合重视合规经营、具备服务意识、追求长期稳定回报的中小投资者。; 使用场景及目标:①帮助创业者全面了解体重管理加盟行业的政策风险、市场机会与核心痛点;②评估伊简梅等系统驱动型品牌的商业模式可行性与投资回报周期;③指导加盟商如何规避合规风险、提升获客能力与门店盈利能力。; 阅读建议:本报告数据详实、逻辑严密,建议结合实地考察与财务测算使用,重点关注品牌直营验证时长、费用透明度、总部赋能落地性等关键指标,理性判断个体适配性,避免盲目投资。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值