第6关:彩色图像识别模型(拓展)

任务描述

本关任务:现有1元、5元、10元、20元、50元、100元共6种面额的纸币彩色图像数据集(每种纸币按正、反面和两个不同的方向,分别采集10张图片,累计每个币种采集40张图片,6种币种合计240张图片),请计算每张图片R、G、B三个颜色通道的一阶、二阶、三阶颜色矩阵,共9个特征指标数据,记为自变量X,同时构造纸币面额标签数据集,记为因变量Y。利用所得的自变量X和因变量Y,数据集按照80%训练、20%测试进行随机划分,构建纸币面额识别模型。

相关知识

为了完成本关任务,你需要掌握:1学会利用listdir()函数获取文件夹中彩色图像的文件名,及其完整路径,以便于对所有图片文件进行读取和处理。2.利用PIL包对图片进行读取、更改大小、获取RGB通道数据等处理。3.利用numpy包创建数组,用来存储图片各颜色通道的数值。4.分离三个颜色通道的各阶颜色矩阵 5.构建支持向量机分类模型

利用OS包中的listdir()函数获取图像的文件名,及其完整路径
 
  1. import os
  2. file='F:\\新教材资料\\水色图像水质评价\\图片'//此处为存储图片的路径和存储图片文件夹的名称
  3. #若存储图片的文件夹与代码处于同一个文件夹内可直接设为存储图片文件夹的名称
  4. d=os.listdir(file) #所有图片文件名
  5. path=file+'\\'+d[i] #第i个图片文件的完整路径
利用PIL包对图片进行读取和处理
 
  1. from PIL import Image//导入PIL包调用PIL包中的Image模块

PIL包中的Image模块可对图片进行读取、改变大小、分离颜色通道——等应用

 
  1. img = Image.open(path) #读取图片,返回数据包括RGB通道
  2. img=img.resize((60,60)) #更改图片大小
  3. im= img.split() #分离RGBA通道
利用numpy包对各颜色通道进行存储及计算
 
  1. import numpy as np//导入numpy包
  2. X=np.zeros((len(d),9)) #预定义自变量,即9个颜色矩阵特征指标
  3. Y=np.zeros(len(d)) #预定义因变量
  4. R=np.array(im[0]) #R通道
  5. G=np.array(im[1]) #G通道
  6. B=np.array(im[2]) #B通道
分离三个颜色通道的各阶颜色矩阵
 
  1. #比如R通道一阶颜色矩(均值)和二阶颜色矩(标准差)
  2. r1=np.mean(R)
  3. r2=np.std(R)
  4. #R三阶颜色矩可通过公式计算
  5. a=np.mean(abs(R-R.mean())**3)
  6. r3=a**(1./3)
基于图片命名前缀,构建因变量
 
  1. #从图片的文件名中,截取前缀,构造因变量Y
  2. png_name=d[i]
  3. Y[i]=png_name.split("_")[0]
构建支持向量机分类模型

构建支持向量机分类模型,利用随机分配的80%的数据对向量机模型进行训练。

 
  1. from sklearn.svm import SVC
  2. clf = svm.SVC(class_weight='balanced') //其中核函数可以选择线性核、多项式核、高斯核、sig核,分别用linear、poly、rbf、sigmoid表示,默认情况下选择高斯核。本题使用类标签平衡策略
  3. clf.fit(x_train,y_train)//调用svm中的fit()方法进行训练。
  4. rv=clf.score(x, y); 调用svm中的score()方法,考查训练效果。
  5. 此时的rv为模型准确率(针对训练数据)
  6. y1=clf.predict(x_test)//对测试数据进行预测,并获得预测结果
  7. r=y1-y_test//预测值与真实值相减
  8. v=len(r[r==0])/len(y1)//预测值与真实值相减为0,即预测准确,即测试机预测准确值

编程要求

根据提示,在右侧编辑器补充代码,完成建模、代码编写和分析。

'''
任务:
现有1元、5元、10元、20元、50元、100元共6种面额的纸币彩色图像,储存在"图片"文件夹内,相关信息及要求如下:
1)每种纸币均从正、反两面及两个不同的方向,进行采集图像各10张,即每种纸币采集40张,6种货币,则总图片有240张。
2)图片的命名为:面额值_采集序号.png,比如1元纸币40张依次命名为:1_1.png~1_40.png,其他同理。
3)读取图片文件夹,计算每张图片的R、G、B三个颜色通道的一阶、二阶、三阶颜色矩特征,共9个特征指标数据,记为自变量X,
4)同时构造纸币面额标签数据集,记为因变量Y。
5)按80%训练和20%测试进行随机划分数据集,构建支持向量机分类模型,
6)返回模型的准确率rv和测试集的预测准确率rs。
'''
from PIL import Image
import numpy as np
import os

def return_values():
    path='图片/' #任务1的图片文件夹
    fname=os.listdir(path) 
    X=np.zeros((len(fname),9)) #预定义自变量,即9个颜色矩阵特征指标
    Y=np.zeros(len(fname)) #预定义因变量
    for i in range(len(fname)):
        img=Image.open(path+fname[i]) #读取第i张图片
        im=img.split()
        R=np.array(im[0])/255                #R通道
        row_1=int(R.shape[0]/2)-50
        row_2=int(R.shape[0]/2)+50
        con_1=int(R.shape[1]/2)-50
        con_2=int(R.shape[1]/2)+50
        R=R[row_1:row_2,con_1:con_2]
        G=np.array(im[1])/255                #G通道
        G=G[row_1:row_2,con_1:con_2]
        B=np.array(im[2])/255                #B通道
        B=B[row_1:row_2,con_1:con_2]
        #构造X
        png_name=fname[i]
        X[i]=png_name.split("_")[0]
        #构造Y
        png_name=fname[i]
        Y[i]=png_name.split("_")[0]
        #建模及计算
        from sklearn.model_selection import train_test_split
        x_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=0.2,random_state=4)
        from sklearn.svm import SVC
        svm_clf = SVC(kernel='linear') 
        svm_clf.fit(x_train,y_train)
        rv=svm_clf.score(x_train, y_train)
        y1=svm_clf.predict(x_test)
        r=y1-y_test
        rs=len(r[r==0])/len(y1)
    return (rv,rs)

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coralberry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值