【问题标题】:Bright dark images detection亮暗图像检测
【发布时间】:2026-01-24 09:30:01
【问题描述】:

我正在做一个关于分析树木绿色趋势的项目。在初始处理方面,我得到了全部 500 张图像的强度值,并确定了从数据集中选择好的图像的阈值。大约在 60 到 122 之间,我将该范围命名为好图像。在 @Andriy Makukha 的帮助下,我还从数据集中检测到了一些雾/霾图像。

然而,当我试图用同样的方法来区分不同意义上的好图片和坏图片时,它根本不起作用。如下图所示:

这是我的平均强度和阈值代码:

 im = Image.open('IMAG0170.JPG')
 im_grey = im.convert('LA')
 width,height = im.size

 total=0
 for i in range(0,width):
   for j in range(0,height):
     total += im.getpixel((i,j))[0]

 mean = total / (width * height)
 print mean

import cv2
import numpy as np
from matplotlib import pyplot as plt

results = []
for dirpath, dirnames, filenames in     os.walk("/Users/Terrynightbleach/Desktop/Dataset-Tree/No1_Leith Valley/"):
  for filename in [f for f in filenames if f.endswith('.JPG')]:
    img = cv2.imread(filename)
    avg_color_per_row = numpy.average(img, axis=0)
    avg_color = numpy.average(avg_color_per_row, axis=0)
    results.append(sum(avg_color/3))
np_results = np.array(results)
plt.hist(np_results,bins=100)
plt.show()

就这个网站而言,真的很难确定阈值。有什么方法可以用来区分数据集中的高强度暗图片吗? 如果我打算专注于局部方差并运行窗口方法,一些专家能否给我一个提示。非常感谢...

【问题讨论】:

  • 你说的“不同感”是什么?
  • 嗨,大卫,我指的是不同的拍摄地点。有些图片是从公园拍的,有些是从其他地方拍的。
  • 为什么你认为红色通道的平均强度是拒绝图像的合适度量?你要买什么?图片曝光不足?
  • @Cris Luengo ,我没有假设红色通道的平均强度是合适的,我只是计算了图像的三个通道的平均强度,我只是在寻找可以从数据集中丢弃完全黑暗图像的方法。

标签: python image-processing


【解决方案1】:

我仍然不太确定您在寻找“好”图像中的确切内容,但我会仔细研究一下。我在这里做了一些很大的假设,但看起来所有这些图像都来自一些每次拍摄相同位置/视图的网络摄像头。如果这一种观点是您唯一需要担心的观点,那么我会利用这样一个事实,即晚上灌木在底部 2/3 处,而顶部 1/3 基本上全是黑色的。

对于粗略的夜间/白天过滤器,您可以在灌木丛开始之前检查前 N 行,如果它们真的很暗(接近,如果不是真的黑色),那么您可以折腾夜间图像。

对于其余部分,我将再次使用这些是植物的事实,像素绿色通道将更加有用。即一些计算来检查 G 值比 R & B 值大多少可能真的很有帮助。

【讨论】:

  • 提取图像像素阵列 - 使用 64x64 窗口扫描阵列;对于每个窗口,计算纹理特征,将它们存储到数组中 - 研究从图像特征数组中获得的直方图 - 找到一种区分有雾图像和正常图像的方法。