图像处理:空白patch过滤(空白图判断)


前言

在进行训练相关任务时,有时会对图像进行裁剪或取patch的操作,进行这种操作后,不可避免的会引入一些空白patch,或内容量很少的图像,这种图像通常会干扰模型的训练,因此最好过滤掉。本文提供了3种方法对图像进行过滤。

一、唯一像素计数

如果一张图像为空,或者信息很少,其像素的种类也很少,可以根据这一特点进行判断。通过将唯一像素计数与阈值比较,我们可以确定空图像。 可以根据阈值来决定过滤的程度。

import numpy as np
import cv2
def is_empty(img):
   # Reading Image
   image = cv2.imread(img, 0)
   np.reshape(image, (-1,1))
   u, count_unique = np.unique(image, return_counts =True)

   if count_unique.size< 10:
      return "Image is empty"
   else:
      return "Image is not empty"

二、总和像素值

根据像素总和值判断是最简单的方式,但是通常仅用来判断纯黑图和纯白图。

import numpy as np
import cv2

blank_image2 = np.zeros((100,100,3), dtype=np.uint8)
cv2.imwrite("result.jpg", blank_image2)

def is_empty(img):
   # Reading Image
   image = cv2.imread(img)
   h,w,_ = image.shape
   # Checking if the image is empty or not
   if np.sum(image) == 0:
      result = "Image is empty!"
   elif np.sum(image/255.0) == h*w:
      result = "Image is empty!"
   else:
      result = "Image is not empty!"
   return result

三、标准差

标准差能够衡量数据的分布情况,空图像的标准差应该接近零。通常,空白图像可能在整个图像中具有更均匀的像素值。我们可以使用标准差来计算均匀程度。如果值低于某个阈值,则可以说该图像为空。通过标准差判断,能够更好的衡量图像的信息量,一般标准差小,说明图像像素平均,包含的内容信息少。 阈值可以根据实际过滤程度进行调试(阈值越大,过滤后的图像可以保证内容信息丰富度越大)。

import numpy as np
import cv2

def is_empty(img):
   # Reading Image
   image = cv2.imread(img, 0)
   np.reshape(image, (-1,1))
   std_dev=np.std(image)

   if std_dev < 1:
      return "Image is empty"
   else:
      return "Image is not empty"

总结

本文提供了3种方法对图像进行过滤。本人比较喜欢用第三种,能够有效过滤掉一些没有任何意义的图像。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值