TensorFlow——图像定位与分割

常见图像处理的任务

  1. 分类(核心基础)
  2. 分类+定位
    知道对象是什么,还要确定对象所处的位置。在对象附近画一个边框。
  3. 语义分割
    对图像中的像素点进行分类,区分图像中每一个像素点。
  4. 目标检测
    回答图片中有什么,在什么位置。用矩形框框住。
  5. 实例分割
    目标检测与语义分割的结合。需要精确到物体的边缘。

图像定位

输出四个数字(x,y,w,h),图像中某一个点的坐标(x,y),以及图像的宽度和高度。
在这里插入图片描述

Oxford-IIIT数据集

在这里插入图片描述
在这里插入图片描述

图像定位示例

图片文件和对应文件信息如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# 获取一张图片
img = tf.io.read_file('D:/Desktop/数据集/图片定位与分割数据集/images/images/Abyssinian_1.jpg')
# 对图片解码
img = tf.image.decode_jpeg(img)
# 显示图片
plt.imshow(img)

在这里插入图片描述

# 读取xml文件中的内容
xml = open('D:/Desktop/数据集/图片定位与分割数据集/annotations/annotations/xmls/Abyssinian_1.xml').read()
# 创建选择器
sel = etree.HTML(xml)
# 解析文件中的图片数据
width = int(sel.xpath('//size/width/text()')[0])
height = int(sel.xpath('//size/height/text()')[0])
xmin = int(sel.xpath('//bndbox/xmin/text()')[0])
xmax = int(sel.xpath('//bndbox/xmax/text()')[0])
ymin = int(sel.xpath('//bndbox/ymin/text()')[0])
ymax = int(sel.xpath('//bndbox/ymax/text()')[0])
plt.imshow(img)
# 绘制矩形框,((x,y),h,w)    fill指定是否填充矩形框
rect = Rectangle((xmin,ymin),(xmax-xmin),(ymax-ymin),fill=False,color='red')
# 获取当前图像
ax = plt.gca()
# 添加矩形框
ax.axes.add_patch(rect)

在这里插入图片描述

图像定位与分类实例

对猫狗图像的头部进行定位并显示,并且将图像中的猫和狗进行分类,数据集同上。
保存了训练好的模型、可视化结果、打印了训练过程的log

实例代码:

导入需要使用到的库文件

import tensorflow as tf
import matplotlib.pyplot as plt
from lxml import etree  # 解析xml文件
import numpy as np
import glob
from matplotlib.patches import Rectangle  # 绘制矩形框
from tensorflow.keras.callbacks import CSVLogger

处理输入数据

def process_data():
    '''
    创建输入管道
    :return: 训练数据集和验证数据集
    '''

    #  读取所有的图像
    images = glob.glob(
        "F:\\dataset\\图片定位与分割\\images\\*.jpg")  # images[0] ===> F:\dataset\图片定位与分割\images\Abyssinian_1.jpg
    #  获取图像对应的目标xml文件
    xmls = glob.glob(
        "F:\\dataset\\图片定位与分割\\annotations\\xmls\\*.xml")  # xmls[0] ===> F:\dataset\图片定位与分割\annotations\xmls\Abyssinian_1.xml
    #  获取所有解析文件的名称
    names = [x.split('xmls\\')[1].split('.')[0] for x in xmls]
    #  取出有对应xml文件的图片作为训练集
    imgs_train = [img for img in images if img.split('images\\')[1].split('.')[0] in names]
    #  取出没有对应xml文件的图片作为测试集
    imgs_test = [img for img in images if img.split('images\\')[1].split
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值