图像数据预处理(二)——截取框选区域,目标检测预训练数据集制作

一、需求

1、截取出图像中的框选区域(病变区域),归为一类

2、截取出背景作为一类

二、实验

1、数据:灰度图上有矩形框标注

  • hemo为红框、NP为绿框、此外还需从中截取出部分背景

2、 截取框中的区域

import cv2 as cv
import numpy as np
import os
import shutil
import skimage
from skimage.measure import regionprops,label
from skimage import data,util

def get_files(path):
    files=os.listdir(path)
    return files

def cv_imread(file):
    img = cv.imdecode(np.fromfile(file, dtype=np.uint8), -1)
    return img

def cv_imwrite(filename, src):
    cv.imencode(".jpg", src)[1].tofile(filename)
path_1='F:/data/data3/label/hemo/'
path_2='F:/data/data3/raw/'
path_3='F:/data/data3/depart/hemo/'

files=os.listdir(path_1)

for file in files:
    img=cv_imread(path_1+file)

    #转换成HSV方便提取边框
    hsv=cv.cvtColor(img,cv.COLOR_BGR2HSV)
    lower_hsv=np.array([0,43,46])
    high_hsv=np.array([10,255,255])
    mask=cv.inRange(hsv,lowerb=lower_hsv,upperb=high_hsv)

    mask2=mask/255
    label_img=label(mask2,connectivity=mask.ndim)
    props = regionprops(label_img)

    raw=path_2+file#读取原始数据
    img_raw=cv_imread(raw)
    
    new_file,_=file.split('.')#去掉后缀名
    for i in range(len(props)):
        y1,x1,y2,x2=props[i].bbox
        area=abs((y1-y2)*(x1-x2))
        if area>50:#筛除过小的区域
            img_save=img_raw[y1:y2,x1:x2]
            cv_imwrite(path_3+new_file+'_'+str(i)+'.jpg',img_save)

3、截取背景

  • 采用滑框,如256 * 256,128 * 128,通过与已有的区域的公共面积(IoU)来判断,如:选取IoU<0.3的区域作为背景,本实验中0.3效果不太好,所以选用IoU<0,即完全不重合。
size=128

def bg_cut(path_raw,path_label,path_save,color='red'):
    if color=='red':
        lower_hsv=np.array([
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值