图片专栏——曝光度调整相关

devtools/2025/1/23 9:20:47/
  1. 假设条件

    • 如果两张图片是同一场景或内容(例如科研中的实验图片),那么它们的直方图应该有一定的相似性。
    • 曝光度调整通常会导致直方图的整体平移或缩放,而不是完全改变分布形状。
  2. 改进方法

    • 直方图平移检测:检查直方图是否整体平移(例如曝光度增加或减少)。
    • 直方图形状相似性:使用更高级的直方图比较方法(如巴氏距离或卡方距离)来评估形状相似性。
    • 局部特征对比:如果可能,提取图片的局部特征(如边缘、纹理)进行比较,确保图片内容一致。

改进代码:

以下代码结合了直方图平移检测和形状相似性分析:

python">import cv2
import numpy as np
import matplotlib.pyplot as plt# 加载原始图片和处理后的图片
original_image = cv2.imread('original_image.jpg', cv2.IMREAD_GRAYSCALE)
processed_image = cv2.imread('processed_image.jpg', cv2.IMREAD_GRAYSCALE)# 计算直方图
original_hist = cv2.calcHist([original_image], [0], None, [256], [0, 256])
processed_hist = cv2.calcHist([processed_image], [0], None, [256], [0, 256])# 归一化直方图
original_hist = original_hist / original_image.size
processed_hist = processed_hist / processed_image.size# 绘制直方图
plt.figure(figsize=(10, 5))plt.subplot(1, 2, 1)
plt.plot(original_hist, color='black')
plt.title('原始图片直方图')
plt.xlabel('像素值')
plt.ylabel('频率')plt.subplot(1, 2, 2)
plt.plot(processed_hist, color='black')
plt.title('处理后图片直方图')
plt.xlabel('像素值')
plt.ylabel('频率')plt.show()# 比较直方图形状相似性(使用巴氏距离)
def compare_histograms(hist1, hist2):# 巴氏距离(值越小,直方图越相似)return cv2.compareHist(hist1, hist2, cv2.HISTCMP_BHATTACHARYYA)# 检测直方图是否平移(曝光度调整)
def detect_exposure_shift(hist1, hist2):# 计算直方图的均值mean1 = np.sum(np.arange(256) * hist1.flatten())mean2 = np.sum(np.arange(256) * hist2.flatten())shift = mean2 - mean1return shift# 计算直方图形状相似性
bhattacharyya_distance = compare_histograms(original_hist, processed_hist)
print(f"直方图巴氏距离: {bhattacharyya_distance}")# 检测直方图平移
exposure_shift = detect_exposure_shift(original_hist, processed_hist)
print(f"直方图平移量: {exposure_shift}")# 判断是否存在曝光度调整
if bhattacharyya_distance < 0.2 and abs(exposure_shift) > 10:  # 阈值可以根据实际情况调整print("处理后的图片可能经过曝光度调整。")
else:print("处理后的图片不太可能经过曝光度调整。")

代码改进点:

  1. 巴氏距离

    • 用于衡量直方图形状的相似性。值越小,说明直方图形状越相似。
    • 如果两张图片的内容相同,但曝光度不同,巴氏距离应该较小。
  2. 直方图平移检测

    • 计算直方图的均值差异,判断是否存在整体平移。
    • 如果平移量较大(例如大于10),则可能存在曝光度调整。
  3. 综合判断

    • 如果直方图形状相似(巴氏距离小)且存在明显平移(平移量大),则可以认为存在曝光度调整。

示例输出:

  • 直方图巴氏距离: 0.15
  • 直方图平移量: 25
  • 结论: 处理后的图片可能经过曝光度调整。

注意事项:

  1. 阈值调整

    • 巴氏距离和平移量的阈值需要根据具体场景调整。
    • 例如,巴氏距离的阈值可以设为0.2,平移量的阈值可以设为10。
  2. 图片内容一致性

    • 该方法假设两张图片的内容基本相同。如果内容完全不同,直方图比较将失效。
  3. 其他图像处理操作

    • 如果图片经过其他处理(如对比度调整、滤波等),可能需要更复杂的分析方法。

通过这种方法,可以更准确地检测图片是否经过曝光度调整,同时避免误判。


http://www.ppmy.cn/devtools/152840.html

相关文章

vm ubuntu 清理空间

前言 本地ubuntu df -kh 显示50G&#xff0c;查看vm虚拟机文件&#xff0c;显示300G 方法 ubuntu记得安装 vmware-tools-distrib sudo /usr/bin/vmware-toolbox-cmd disk list sudo /usr/bin/vmware-toolbox-cmd disk shrink /

JavaScript —— 输入与输出

输入与输出 输入&#xff1a; 从HTML与用户的交互中输入信息&#xff0c;例如通过input、textarea等标签获取用户的键盘输入&#xff0c;通过click、hover等事件获取用户的鼠标输入。 例如&#xff1a; <body>输入&#xff1a;<textarea class"input" na…

【EdgeAI实战】(1)STM32 边缘 AI 生态系统

【EdgeAI实战】&#xff08;1&#xff09;STM32 边缘 AI 生态系统 【EdgeAI实战】&#xff08;1&#xff09;STM32 边缘 AI 生态系统 1. STM32 边缘人工智能1.1 X-CUBE-AI 扩展包1.2 STM32 AI Model Zoo1.3 ST AIoT Craft 2. STM32N6 AI 生态系统 (STM32N6-AI)2.1 STM32N6 AI 产…

Python中的“@”有何作用

最近看 D2L 的代码发现经常会出现下面这样的的情况&#xff1a;在一个类或函数的最前面有个。虽然第二章解释了后面的注释#save&#xff1a;表示下面的函数是已经定义在包里的&#xff0c;后面不用重新定义便可直接使用。但是并没有解释这里的用法。 找了一下资料发现&#x…

【腾讯云】docker创建网络遇到Unable to enable SKIP DNAT rule

docker创建网络遇到Unable to enable SKIP DNAT rule 背景 今天打算在服务器上安装es,但是在创建网络时&#xff0c;提示 Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER…

vue项目动态div滚动条滑动到指定位置效果

标题首先我们得明确几个知识点 element.scrollIntoView this.$el.querySelector 文档对象模型Document引用的 querySelector() 方法返回文档中与指定选择器或选择器组匹配的第一个 Element对象。如果找不到匹配项&#xff0c;则返回null。 用来匹配动态document 代码 // t…

15天基础内容-1

day01 【前言、入门程序、常量】 主要内容 Java语言的发展历史【了解】 Java语言开发环境搭建【重点】 HelloWorld入门程序【重点】 注释和关键字【重点】 常量【重点】第一章 开发前言 1.1 Java语言概述【了解】 Java是一种高级编程语言&#xff0c;而且是面向对象的编程语…

安卓APP如何适配不同的手机分辨率

1 android是根据什么去选择drawable文件夹下的图片&#xff1f; 是根据drawable文件夹的修饰符进行选择的。 比如drawable、drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi、drawalbe-xxhdpi、drawable-xxxhdpi 根据修饰符进行优先匹配。 不同的dpi修饰符对应…