裁剪图像具有不同的黑色边距

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了裁剪图像具有不同的黑色边距相关的知识,希望对你有一定的参考价值。

我有一个图像数据集,在将其提供给深度学习算法之前,我需要将其裁剪为相同的大小。所有图像都有不同大小的黑色边距,如下图所示。任何关于裁剪具有不同边距大小的图像的方法的建议。 enter image description here

enter image description hereenter image description here

答案

由于您的边框颜色是黑色(几乎完美的黑色)并且在所有图像中都是相同的,我建议应用二进制阈值,使除了黑色区域外的所有内容都为白色(255)。现在一些图像区域也可能受到影响,但这不是问题。

现在find contours在图像和第二大轮廓将是您的区域。计算此轮廓的矩形边界框并裁剪原始图像中的相同区域。

另一答案

首先,使用低强度阈值进行阈值处理(如果您的背景肯定是完全黑色,您甚至可以以1的强度阈值)来确定所有非边界成分。

接下来,使用Connected-component标签确定所有隔离的前景组件。您感兴趣的中央扫描图像应始终产生最大的组件。裁剪出这个最大的组件,以删除边框以及所有可能的非黑色文物(标签,字母等)。你应该只留下无边界扫描。

您可以找到任何基本图像处理库中所需的所有算法。我个人建议调查OpenCV,它们还包括phyton绑定。

另一答案

一种方法可以如下:

  • 从左上角开始用红色填充图像,并允许与那里的黑色像素发生大约5%的偏差。

enter image description here

  • 现在将所有不是红色的东西变成白色 - 因为在此之后的下一步寻找白色像素。

enter image description here

  • 现在使用findContours()(寻找白色物体)并选择最大的白色轮廓作为图像并进行裁剪。

您可以考虑通过考虑以下一些想法来使事情更加健壮:

  • 您可以将图像的副本标准化为全黑到白色,以防您接近黑色边框。
  • 您可以检查多个或所有角落像素实际上是黑色,以防您获得没有边框的图像。
  • 如果裁剪的图像看起来小于总图像区域的70%(例如70%),也可以标记问题。
  • 您可以考虑使用9x9方形结构元素的形态开口作为倒数第二步,以便在findContrours()之前整理一下。

enter image description here

另一答案

这是这个问题的解决方案代码:

import warnings
warnings.filterwarnings('always')
warnings.filterwarnings('ignore')
import cv2
import numpy as np
import os

path = "data/benign/"
img_resized_dir = "data/pre-processed/benign/"
dirs = os.listdir(path)

def thyroid_scale():
    for item in dirs:
    if os.path.isfile(path+item):
        img = cv2.imread(path+item)
        gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        ret,thresh = cv2.threshold(gray,0,255,0)
        im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

        areas = [cv2.contourArea(c) for c in contours]
        max_index = np.argmax(areas)
        cnt=contours[max_index]
        x,y,w,h = cv2.boundingRect(cnt)
        crop_img = img[y+35:y+h-5,x+25:x+w-10]
        resize_img = cv2.resize(crop_img, (300, 250), interpolation = cv2.INTER_CUBIC)
        cv2.imwrite(img_resized_dir+item, resize_img)

thyroid_scale()

以上是关于裁剪图像具有不同的黑色边距的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中裁剪图像会留下黑色空间

为啥裁剪图像后会出现黑色区域​​?

旋转图像并裁剪黑色边框

C#裁剪图像中的透明部分

干预裁剪后的 png 图像周围的黑色边框

裁剪带负边距的图像