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 返回汉字的汉语拼音
Feb 27 Python
python字符串连接的N种方式总结
Sep 17 Python
详解Python中的装饰器、闭包和functools的教程
Apr 02 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
Jan 20 Python
Saltstack快速入门简单汇总
Mar 01 Python
Python 探针的实现原理
Apr 23 Python
对Python3中的input函数详解
Apr 22 Python
python 基本数据类型占用内存空间大小的实例
Jun 12 Python
Python的Lambda函数用法详解
Sep 03 Python
python打印文件的前几行或最后几行教程
Feb 13 Python
python实现自动打卡的示例代码
Oct 10 Python
python开发飞机大战游戏
Jul 15 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
用Javascript评估用户输入密码的强度实现代码
2011/11/30 Javascript
nodejs中使用monk访问mongodb
2014/07/06 NodeJs
jQuery中remove()方法用法实例
2014/12/25 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
2015/04/07 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
2017/03/01 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
vuex 的简单使用
2018/03/22 Javascript
通过webpack引入第三方库的方法
2018/07/20 Javascript
解决vue attr取不到属性值的问题
2018/09/18 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
[06:07]刀塔密之二:攻之吾命受之吾幸
2014/07/03 DOTA
python 图片验证码代码
2008/12/07 Python
python实现连接mongodb的方法
2015/05/08 Python
Python连接PostgreSQL数据库的方法
2016/11/28 Python
python3中bytes和string之间的互相转换
2017/02/09 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
深入理解Python单元测试unittest的使用示例
2017/11/18 Python
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
使用tqdm显示Python代码执行进度功能
2019/12/08 Python
入党积极分子自我鉴定
2014/02/18 职场文书
跟单业务员岗位职责
2014/03/08 职场文书
员工试用期自我评价
2014/09/18 职场文书
学校政风行风评议心得体会
2014/10/21 职场文书
导游词格式
2015/02/13 职场文书
干货!开幕词的写作方法
2019/04/02 职场文书
python 制作一个gui界面的翻译工具
2021/05/14 Python