模式识别作业,基于python提取图像纹理特征
其中的直方图的绘画部分要注意,只写了部分的直方图代码###直接调用skimag库中的函数BLP提取纹理
from skimage import dataimport matplotlib.pyplot as pltimport cv2from skimage.feature import local_binary_patternimage = data.camera()plt.subplot(2,3,1)plt.title('original')plt.imshow(image,cmap='gray')#不同方法的BLP展示radius = 3# LBP算法中范围半径的取值n_points = 8 * radius#领域内采样点数#选择四种不同的LBP方法提取纹理method = 'default'#灰度但不是旋转不变的lbp = local_binary_pattern(image, n_points, radius,method)#LBP表达式plt.subplot(232)plt.imshow(lbp, plt.cm.gray)plt.title('default BLP')method = 'uniform'#改进的灰度和旋转不变lbp = local_binary_pattern(image, n_points, radius,method)plt.subplot(233)plt.imshow(lbp, plt.cm.gray)plt.title('uniform BLP')method = 'var'#旋转但不是灰度不变的lbp = local_binary_pattern(image, n_points, radius,method)plt.subplot(234)plt.imshow(lbp, plt.cm.gray)plt.title('var BLP')method = 'ror'#灰度和旋转不变lbp = local_binary_pattern(image, n_points, radius,method)plt.subplot(235)plt.imshow(lbp, plt.cm.gray)plt.title('ror BLP')##加了一个边缘图像对比纹理图像edges = filters.sobel(image)plt.subplot(236)plt.imshow(edges, plt.cm.gray)plt.title('edge')##############BLP圆形算子提取纹理,程序unit16import numpy as npimport cv2import matplotlib.pyplot as pltimport mathfrom skimage import datadef circular_LBP(src, radius, n_points):height = src.shape[0]width = src.shape[1]# dst = np.zeros([height, width], dtype=np.uint8)dst = src.copy()src.astype(dtype=np.float32)dst.astype(dtype=np.float32)neighbours = np.zeros((1, n_points), dtype=np.uint8)lbp_value = np.zeros((1, n_points), dtype=np.uint8)for x in range(radius, width - radius ):for y in range(radius, height - radius ):lbp = 0.for n in range(n_points):theta = float(2 * np.pi * n) / n_pointsx_n = x + radius * np.cos(theta)#计算采样点的坐标y_n = y - radius * np.sin(theta)# 向下取整x1 = int(math.floor(x_n))y1 = int(math.floor(y_n))# 向上取整x2 = int(math.ceil(x_n))y2 = int(math.ceil(y_n))# 将坐标映射到0-1之间tx = np.abs(x - x1)ty = np.abs(y - y1)# 根据0-1之间的x,y的权重计算公式计算权重w1 = (1 - tx) * (1 - ty)w2 = tx * (1 - ty)w3 = (1 - tx) * tyw4 = tx * ty# 根据双线性插值公式计算第k个采样点的灰度值neighbour = src[y1, x1] * w1 + src[y2, x1] * w2 + src[y1, x2] * w3 + src[y2, x2] * w4neighbours[0, n] = neighbourcenter = src[y, x]# ######确定中心值for n in range(n_points):if neighbours[0, n] > center:lbp_value[0, n] = 1else:lbp_value[0, n] = 0# 取出所有的中心值for n in range(n_points):lbp += lbp_value[0, n] * 2**n# print('lbp_value[0, n] * 2**n : {}'.format(lbp_value[0, n] * 2**n))# LBP值归一化处理,并把灰度值转到0-255dst[y, x] = int(lbp / (2**n_points-1) * 255)return dstdef show_basic_hist(a): #画lbp的直方图 hist = cv.calcHist([a],[0],None,[256],[0,256])#hist = cv.normalize(hist,hist)plt.plot(hist, color='r')plt.xlim([0,256]) img2 = cv.imread("D:\honeycombed_0169.jpg",0)plt.title('original hist')show_basic_hist(img2)if __name__ == '__main__':img = data.camera()dst18 = circular_LBP(img, radius=1, n_points=8)dst38 = circular_LBP(img, radius=3, n_points=8)dst316 = circular_LBP(img, radius=3, n_points=16)plt.subplot(1,4,1)plt.title('original')plt.imshow(img,cmap='gray')plt.subplot(1,4,2)plt.title('dst18')plt.imshow(dst18)plt.subplot(1,4,3)plt.title('dst38')plt.imshow(dst38)plt.subplot(1,4,4)plt.title('dst316')plt.imshow(dst316)##########Untitled15 2.Gabor滤波器提取纹理特征import cv2import numpy as npimport pylab as plfrom PIL import Image#构建Gabor滤波器def build_filters():filters = []ksize = [7,9,11,13,15,17] #gabor有尺度 6个lamda = np.pi/2.0 # 设置波长for theta in np.arange(0,np.pi,np.pi/4): #gabor方向 0 45 90 135for k in range(6):kern= cv2.getGaborKernel((ksize[k],ksize[k]),1.0,theta,lamda,0.5,0,ktype=cv2.CV_32F)#生成Gabor 滤波核,即模板kern/= 1.5*kern.sum()#规范化内核,确保内核不会改变整体亮度 filters.append(kern)for temp in range(len(filters)):plt.subplot(4, 6, temp + 1)plt.imshow(filters[temp])plt.show() return filters#滤波过程def process(img,filters):accum = np.zeros_like(img)#构造矩阵for kern in filters:fimg = cv2.filter2D(img,cv2.CV_8UC3,kern)#自定义卷积核实现卷积 np.maximum(accum,fimg,accum)#依次比较取最大return accum#特征图生成并显示def getGabor(img,filters):image = Image.open(img)img_ndarray = np.asarray(image)#图像转换成数组res = [] #滤波结果for i in range(len(filters)):res1 = process(img_ndarray,filters[i])res.append(np.asarray(res1))pl.figure(2)for temp in range(len(res)):pl.subplot(4,6,temp+1) #画4*6格子pl.imshow(res[temp],cmap='gray')show_basic_hist(res[temp])pl.show()return resdef show_basic_hist(a): #画Garbor的直方图 hist = cv.calcHist([a],[0],None,[256],[0,256])#hist = cv.normalize(hist,hist)plt.plot(hist, color='r')plt.xlim([0,256])plt.show()img2 = cv.imread("D:\honeycombed_0169.jpg",0)show_basic_hist(img2)plt.title('original hist')if __name__ == '__main__':filters = build_filters()getGabor('D:\img.jpg',filters)实验结果
LBP的方法展示,原始图像有三张,分别为camera、模板、蜂窝,结果展示了三种图像在LBP提取纹理方法下的直方图。
模式识别作业,基于python提取图像纹理特征相关推荐
- python统计图片的纹理信息_python实现LBP方法提取图像纹理特征实现分类
题目描述 这篇博文是数字图像处理的大作业. 题目描述:给定40张不同风格的纹理图片,大小为512*512,要求将每张图片分为大小相同的9块,利用其中的5块作为训练集,剩余的4块作为测试集,构建适当的模 ...
- 【图像识别算法】像素级提取图像关键特征、内容 --python代码
像素级提取图像关键特征算法-rgb 关键词:python像素级处理图像,python提取图片关键特征. 基于knn的图像识别技术主要涉及到以下概念: 色彩成像原理 [图像原理]rgb数字图片概念 计算 ...
- 基于python的图像Gabor变换及特征提取
基于python的图像Gabor变换及特征提取 1.前言 2. "Gabor帮主"简介 3."Gabor帮主"大招之图像变换 3."Gabor帮主&q ...
- 图像纹理特征(灰度共生矩阵等)解析和编程调用
图像纹理特征 本文主要介绍医学影像领域常用到的基于图像灰度值变化所衍生出的各项纹理特征,理论部分主要参考了文献1,同时介绍了相关函数调用方式. 灰度共生矩阵 灰度共生矩阵2,Gray-Level ...
- LBP算法提取图片纹理特征图
LBP算法提取图片纹理特征图 一.项目目标 采用LBP算法提取图片的纹理特征图. 二.LBP算法原理 LBP指局部二值模式,英文全称:Local Binary Patterns.最初功能为辅助图像局部 ...
- Ubuntu16.04下基于opencv--实现图像SIFT特征与全景图片的生成
Ubuntu16.04下基于opencv--实现图像SIFT特征与全景图片的生成 一. 理解和实践SIFT特征提取与匹配 二. 全景图片的生成 三.循环依次读取一个序列图片,进行匹配连线 一. 理解和 ...
- OpenCV python 提取图像内的三色
OpenCV python 提取图像内的三色 原图 [opencv.jpg] import cv2 import numpy as npdef main():# 1.导入图片img_src = cv2 ...
- Gabor滤波进行目标图像纹理特征的提取
1.傅里叶变换 1) 简介 数字图像处理的方法主要分成两大部分:空域分析法和频域分析法.空域分析法就是对图像矩阵进行处理:频域分析法是通过图像变换将图像从空域变换到频域,从另外一个角度来分析图像的特征 ...
- Python计算图像纹理-灰度共生矩阵
基于Python探究灰度共生矩阵(GLCM)那点事儿 - 知乎一.什么是灰度共生矩阵? 灰度共生矩阵(Gray-level co-occurrence matrix:GLCM)和相关的纹理特征计算是图 ...
最新文章
- mysql去除输入的字符串中的中文_Sql得到(去除)字符串中所有汉字,字母,数字的函数...
- Spring Mybatis实例SqlSessionDaoSupport混用xml配置和注解
- 指定开始_@高坪人,熏腊肉开始啦!指定地点仅限这9个地方,别走错啦
- Linux常见英文报错中文翻译(菜鸟必知)
- 【CodeForces - 144D】Missile Silos(单源最短路,枚举中间边,枚举情况可能性)
- W3C近期要闻:W3C战略重点报告新版发布
- vue-element-admin 设置默认语言
- Fragment标签页+OKHttp网络请求数据+MVP模式
- Java 1-Java 基础语法
- 如何编写完美的 Python 命令行程序?
- netron神经网络可视化
- 锋利的jQuery系列一
- 【推荐算法】协同过滤推荐算法综述 传统推荐算法综述
- 【Windows】PPT播放视频提示媒体不可用的解决方法
- linux mlocate.db文件文件过大
- quantization 顶会文章简介 2017
- java十进制转换成二进制
- 计算机关闭自带杀毒,电脑系统自带杀毒软件怎么关闭?两种Windows defender彻底关闭方法(图文)...
- OSI七层网络模型介绍
- newman执行测试_Newman的使用讲解