由于发布的图像数据集分辨率大小不一,并且图像存在大黑边,这样会导致图像在输入进网络之前有各种尺寸的图像,并且resize之后关注的区域会被压缩或者拉伸。因此,我们考虑到将图像进行裁剪以尽可能地保证输入图像为同一类型的尺寸输入

这里图像比较特殊,背景几乎为全0。这里,我们使用了阈值分割来提取图像的坐标

import pandas as pd
from PIL import image
from pylab import *
from skimage import transform
import scipy.misc

def crop_and_resize(img, rows, cols):
    #输入前的转为array
    # Image crop
    image_gray = np.mean(img, 2) #转为灰度图
    img_coord = np.where(img_gray>0) #找到前景区域内不为0的坐标保存在img_coord里面
    img_row = img_coord[0] #保存x值的array
    img_col = img_coord[1] #保存y值的array
    row_lo = np.min(img_row)
    row_hi = np.max(img_row)
    col_lo = np.min(img_col)
    col_hi = np.max(img_col)

    img_crop = img[row_lo:row_hi,col_lo:col_hi,:]
    
    ######   Image resize
    ## 这里用了transform来调整array尺寸
    img_crop_resize = transform.resize(img_crop,(rows,cols))
    
    return img_crop_resize
    
    

通过这样一种简单的方法实现数据集图像的裁剪和resize

后面将处理之后的图像保存在本地供访问

在保存图的时候又调用了另一个库scipy.misc

scipy.misc.imsave('path',img_crop_resize)

后面再从文件夹里面读取数据就行了。

应该还有更好的方法,这里只是作为可以实现的一种方案。 

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐