由于发布的图像数据集分辨率大小不一,并且图像存在大黑边,这样会导致图像在输入进网络之前有各种尺寸的图像,并且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)
后面再从文件夹里面读取数据就行了。
应该还有更好的方法,这里只是作为可以实现的一种方案。