python实现LBP方法提取图像纹理特征实现分类的步骤


Posted in Python onJuly 11, 2019

题目描述

这篇博文是数字图像处理的大作业.

题目描述:给定40张不同风格的纹理图片,大小为512*512,要求将每张图片分为大小相同的9块,利用其中的5块作为训练集,剩余的4块作为测试集,构建适当的模型实现图片的分类.

图片如下图所示:

python实现LBP方法提取图像纹理特征实现分类的步骤

分析:由于数据集太小,所以神经网络模型并不适合此类的图像处理.就需要寻找方法提取图像的纹理信息.本文采用LBP的方法提取图像的纹理信息,然后转化成直方图作为图像的特征,然后使用多分类的方法进行分类.

环境

python2.7,jupyter notebook,anaconda

实现

读取数据

Numpy包数组操作API格式化数据

def loadPicture():
  train_index = 0;
  test_index = 0;
  train_data = np.zeros( (200,171,171) );
  test_data = np.zeros( (160,171,171) );
  train_label = np.zeros( (200) );
  test_label = np.zeros( (160) );
  for i in np.arange(40):
    image = mpimg.imread('picture/'+str(i)+'.tiff');
    data = np.zeros( (513,513) );
    data[0:image.shape[0],0:image.shape[1]] = image;
    #切割后的图像位于数据的位置
    index = 0;
    #将图片分割成九块
    for row in np.arange(3):
      for col in np.arange(3):
        if index<5:
          train_data[train_index,:,:] = data[171*row:171*(row+1),171*col:171*(col+1)];
          train_label[train_index] = i;
          train_index+=1;
        else:
          test_data[test_index,:,:] = data[171*row:171*(row+1),171*col:171*(col+1)];
          test_label[test_index] = i;
          test_index+=1;
        index+=1;
  return train_data,test_data,train_label,test_label;

特征提取

LBP特征提取方法

radius = 1;
n_point = radius * 8;

def texture_detect():
  train_hist = np.zeros( (200,256) );
  test_hist = np.zeros( (160,256) );
  for i in np.arange(200):
    #使用LBP方法提取图像的纹理特征.
    lbp=skft.local_binary_pattern(train_data[i],n_point,radius,'default');
    #统计图像的直方图
    max_bins = int(lbp.max() + 1);
    #hist size:256
    train_hist[i], _ = np.histogram(lbp, normed=True, bins=max_bins, range=(0, max_bins));

  for i in np.arange(160):
    lbp = skft.local_binary_pattern(test_data[i],n_point,radius,'default');
    #统计图像的直方图
    max_bins = int(lbp.max() + 1);
    #hist size:256
    test_hist[i], _ = np.histogram(lbp, normed=True, bins=max_bins, range=(0, max_bins));


  return train_hist,test_hist;

训练分类器

SVM支持向量机分类.

import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import numpy as np
from sklearn.multiclass import OneVsRestClassifier
from sklearn.svm import SVR
from skimage import feature as skft
train_data,test_data,train_label,test_label= loadPicture();
train_hist,test_hist = texture_detect();
svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1);
OneVsRestClassifier(svr_rbf,-1).fit(train_hist, train_label).score(test_hist,test_label)

实验测试集结果的正确率为:90.6%

python实现LBP方法提取图像纹理特征实现分类的步骤

第一次使用python的numpy包,对其中的api是真的不熟悉,代码还可以优化.其中和matlab里的矩阵操作也有不少不同,但是关于机器学习的scikitlearn包确实很好用.

总结:结果的正确率不是很高,所以还是可以在分类器上优化,或者寻找更好的特征提取的方式.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 解析XML文件
Apr 15 Python
python 字符串split的用法分享
Mar 23 Python
举例详解Python中的split()函数的使用方法
Apr 07 Python
Windows下搭建python开发环境详细步骤
Jul 20 Python
unittest+coverage单元测试代码覆盖操作实例详解
Apr 04 Python
基于python的多进程共享变量正确打开方式
Apr 28 Python
Python实现的redis分布式锁功能示例
May 29 Python
对Python中for复合语句的使用示例讲解
Nov 01 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
Feb 27 Python
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
Apr 05 Python
超详细Python解释器新手安装教程
May 10 Python
Python破解极验滑动验证码详细步骤
May 21 Python
Python用字典构建多级菜单功能
Jul 11 #Python
Python + OpenCV 实现LBP特征提取的示例代码
Jul 11 #Python
python切片的步进、添加、连接简单操作示例
Jul 11 #Python
python 日期排序的实例代码
Jul 11 #Python
Python qqbot 实现qq机器人的示例代码
Jul 11 #Python
python的一些加密方法及python 加密模块
Jul 11 #Python
kali中python版本的切换方法
Jul 11 #Python
You might like
一个php作的文本留言本的例子(一)
2006/10/09 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
php引用地址改变变量值的问题
2012/03/23 PHP
十大使用PHP框架的理由
2015/09/26 PHP
PHP实现原生态图片上传封装类方法
2016/11/08 PHP
简略说明Javascript中的= =(等于)与= = =(全等于)区别
2013/04/16 Javascript
js读取注册表的键值示例
2013/09/25 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
js中利用tagname和id获取元素的方法
2016/01/03 Javascript
基于JavaScript实现验证码功能
2017/04/01 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
vue实现带复选框的树形菜单
2019/05/27 Javascript
微信小程序实现图片压缩
2019/12/03 Javascript
微信小程序实现上拉加载功能示例【加载更多数据/触底加载/点击加载更多数据】
2020/05/29 Javascript
解决vue-cli输入命令vue ui没效果的问题
2020/11/17 Javascript
python访问sqlserver示例
2014/02/10 Python
Python RuntimeError: thread.__init__() not called解决方法
2015/04/28 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
对Python强大的可变参数传递机制详解
2019/06/13 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
selenium+PhantomJS爬取豆瓣读书
2019/08/26 Python
三个python爬虫项目实例代码
2019/12/28 Python
Python importlib动态导入模块实现代码
2020/04/16 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
瑞典快乐袜子:Happy Socks
2018/02/16 全球购物
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
军训自我鉴定
2014/01/22 职场文书
8和9的加减法教学反思
2014/05/01 职场文书
导师工作推荐信范文
2014/05/17 职场文书
老乡会致辞
2015/07/28 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书
学生检讨书范文
2019/06/24 职场文书
小学作文指导之如何写人?
2019/07/08 职场文书