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类的多重继承问题深入分析
Nov 09 Python
在Python中定义和使用抽象类的方法
Jun 30 Python
Python正规则表达式学习指南
Aug 02 Python
Python运行不显示DOS窗口的解决方法
Oct 22 Python
python+selenium实现自动抢票功能实例代码
Nov 23 Python
Python地图绘制实操详解
Mar 04 Python
python日期相关操作实例小结
Jun 24 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
解决windows下python3使用multiprocessing.Pool出现的问题
Apr 08 Python
matplotlib基础绘图命令之imshow的使用
Aug 13 Python
Python装饰器的练习题
Nov 23 Python
基于Python实现流星雨效果的绘制
Mar 18 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
介绍几个array库的新函数 php
2006/12/29 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
PHP实现的曲线统计图表示例
2016/11/10 PHP
php查询及多条件查询
2017/02/26 PHP
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
深入理解javascript的getTime()方法
2017/02/16 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
2017/05/10 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
写给vue新手们的vue渲染页面教程
2017/09/01 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
vue-router history模式下的微信分享小结
2018/07/05 Javascript
详解如何运行vue项目
2019/04/15 Javascript
JS删除String里某个字符的方法
2021/01/06 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
微信小程序实现聊天室
2020/08/21 Javascript
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
Python 判断是否为质数或素数的实例
2017/10/30 Python
Python并行分布式框架Celery详解
2018/10/15 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
味多美官网:蛋糕订购,100%使用天然奶油
2017/11/10 全球购物
科颜氏印度官网:Kiehl’s印度
2021/02/20 全球购物
教育系毕业生中文求职信范文
2013/10/06 职场文书
公司庆典邀请函范文
2014/01/13 职场文书
运动会广播稿60字
2014/01/15 职场文书
团日活动总结报告
2014/06/25 职场文书
2016年青少年禁毒宣传教育活动总结(学校)
2016/04/05 职场文书
mybatis-plus模糊查询指定字段
2022/04/28 Java/Android