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制作一个桌面便签软件
Aug 09 Python
机器学习的框架偏向于Python的13个原因
Dec 07 Python
Python使用matplotlib实现基础绘图功能示例
Jul 03 Python
python+pyqt5实现KFC点餐收银系统
Jan 24 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
Apr 15 Python
基于python监控程序是否关闭
Jan 14 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
Feb 03 Python
Python利用for循环打印星号三角形的案例
Apr 12 Python
python使用Thread的setDaemon启动后台线程教程
Apr 25 Python
基于Python脚本实现邮件报警功能
May 20 Python
Python文件操作模拟用户登陆代码实例
Jun 09 Python
PyQt5 显示超清高分辨率图片的方法
Apr 11 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利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
2014/07/25 PHP
php中mail函数发送邮件失败的解决方法
2014/12/24 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
PHP mkdir创建文件夹实现方法解析
2020/11/13 PHP
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
Angular 页面跳转时传参问题
2016/08/01 Javascript
浅析BootStrap中Modal(模态框)使用心得
2016/12/24 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
如何快速上手Vuex
2017/02/14 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
Angular2 组件通信的实例代码
2017/06/23 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
浅谈mint-ui loadmore组件注意的问题
2017/11/08 Javascript
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
微信小程序仿美团城市选择
2018/06/06 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
vue element-ui el-date-picker限制选择时间为当天之前的代码
2019/11/07 Javascript
js实现选项卡效果
2020/03/07 Javascript
vue用ant design中table表格,点击某行时触发的事件操作
2020/10/28 Javascript
python读取word文档的方法
2015/05/09 Python
Python字符串格式化的方法(两种)
2017/09/19 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
Python字符串逆序输出的实例讲解
2019/02/16 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
2019/05/10 Python
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
介绍一下Ruby的特点
2013/01/20 面试题
八项规定整改措施
2014/02/12 职场文书
指导教师评语
2014/04/26 职场文书
2015年女生节活动总结
2015/02/27 职场文书
运动会通讯稿50字
2015/07/20 职场文书
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android
Golang Web 框架Iris安装部署
2022/08/14 Python