当前位置: 首页 > article >正文

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

  1. 假设条件

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

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

改进代码:

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

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 - mean1
    return 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.kler.cn/a/513887.html

相关文章:

  • Tomcat - 高并发性能参数配置
  • 二十七、资源限制-LimitRange
  • linux如何并行执行命令
  • .Net WebApi 中的Token参数校验
  • [Qt]事件-鼠标事件、键盘事件、定时器事件、窗口改变事件、事件分发器与事件过滤器
  • 《目标检测数据集下载地址》
  • 如何设置HSTS和OCSP Stapling?
  • js高阶-响应式原理
  • 线性规划:机器学习中的优化利器
  • NodeJs如何做API接口单元测试? --【elpis全栈项目】
  • Vue3初学之商品的增,删,改功能
  • Windows下建立Jupyter-lab 编程环境
  • STM32单片机:GPIO模式
  • gitlab使用多数据库
  • 知识图谱中的word2vec 技术是做什么的?
  • 机器学习10-解读CNN代码Pytorch版
  • Flink 使用 Kafka 作为数据源时遇到了偏移量提交失败的问题
  • matlab实现数据极坐标显示
  • 【深度学习】关键技术-模型训练(Model Training)
  • 【Springboot相关知识】Springboot结合SpringSecurity实现身份认证以及接口鉴权
  • vue md5加密
  • 性能调优篇 四、JVM运行时参数
  • 数据结构(四) B树/跳表
  • elementui完美做到table动态复杂合并行、合并列,适用于vue2、vue3
  • CVPR 2024 人脸方向总汇(人脸识别、头像重建、人脸合成和3D头像等)
  • 声学前端算法方案,提升设备语音交互体验,ESP32-S3智能化联网应用