Gabor特征已广泛用于图像分析和处理(字符和面部识别)。Gabor(诺贝尔奖获得者,电气工程师和物理学家)使用了以下措辞,我认为在这个小插图中值得一提,“你无法预测未来,但你可以发明它。” 

在下面的几行中,我将描述GaborFeatureExtract R6类,其中包括以下方法,

GaborFeatureExtract
gabor_filter_bank()
gabor_feature_extraction()
gabor_feature_engine()
 这些方法基于Matlab代码Gabor Feature Extraction of M. Haghighat,S。Zonouz,M.Abdel-Mottaleb,“CloudID:Trustworthy cloud-based and cross-enterprise biometric identification,”Expert Systems with Applications,vol。42,不。21,pp.7905-7916,2015,http://dx.doi.org/10.1016/j.eswa.2015.06.025。修改了最初的Matlab代码(我添加了Magnitude特性和gabor_feature_engine()方法),并在可能的地方使用Rcpp进行并行化。

Gabor功能

我在CRAN(综合R档案网络)上进行了常规搜索,但我找不到任何与Gabor特征提取相关的内容(截至2018年8月),因此我决定将Matlab代码移植到R中。网上有很多资源如果有人打算加深他/她对这个主题的了解,我会在Vignette的末尾添加一些我觉得有用的内容(参考文献)。

gabor_filter_bank

gabor_filter_bank方法“......生成自定义尺寸的Gabor滤波器组。它创建一个UxV单元阵列,其元素是MxN矩阵; 根据Matlab代码的作者,每个矩阵都是2-D Gabor滤波器。以下代码块显示了它在R中是如何工作的,

library(OpenImageR)init_gb = GaborFeatureExtract$ ()#------------------
# gabor-filter-bank
#------------------gb_f = init_gb$ (scales = 5, orientations = 8, gabor_rows = 39,gabor_columns = 39, plot_data = TRUE)#-----------------------------------------------
# plot of the real part of the gabor-filter-bank
#-----------------------------------------------plt_f = init_gb$ (real_matrices =  $gabor_real, margin_btw_plots = 0.65,thresholding = FALSE)

对于gabor_filter_bank,我使用5个刻度和8个方向来构建大小为39 x 39的过滤器。该方法的输出是长度为3的列表,

str(gb_f)
List of 3$ gaborArray     :List of 40..$ : cplx [1:39, 1:39] -1.58e-12-0.00i 0.00-5.02e-12i 1.50e-11-0.00i .....$ : cplx [1:39, 1:39] 4.86e-08-3.96e-08i 1.02e-07+4.63e-08i 6.31e-09+1.93e-07i .....$ : cplx [1:39, 1:39] 6.24e-06-6.24e-06i 1.18e-05+0.00i 1.10e-05+1.10e-05i .....$ : cplx [1:39, 1:39] -6.69e-05-3.18e-05i -4.63e-05-7.20e-05i -1.60e-06-9.81e-05i .....$ : cplx [1:39, 1:39] 1.40e-04+5.81e-05i 1.15e-04+1.15e-04i 6.68e-05+1.61e-04i ...
.......$ gabor_imaginary:List of 40..$ : num [1:39, 1:39] -4.65e-27 -5.02e-12 -1.10e-26 4.21e-11 -2.99e-25 .....$ : num [1:39, 1:39] -3.96e-08 4.63e-08 1.93e-07 1.53e-07 -3.04e-07 .....$ : num [1:39, 1:39] -6.24e-06 4.84e-20 1.10e-05 2.01e-05 1.81e-05 .....$ : num [1:39, 1:39] -3.18e-05 -7.20e-05 -9.81e-05 -9.58e-05 -5.78e-05 .....$ : num [1:39, 1:39] 5.81e-05 1.15e-04 1.61e-04 1.86e-04 1.83e-04 ...
.......$ gabor_real     :List of 40..$ : num [1:39, 1:39] -1.58e-12 5.54e-27 1.50e-11 -4.12e-26 -1.11e-10 .....$ : num [1:39, 1:39] 4.86e-08 1.02e-07 6.31e-09 -2.85e-07 -4.28e-07 .....$ : num [1:39, 1:39] 6.24e-06 1.18e-05 1.10e-05 -8.11e-20 -1.81e-05 .....$ : num [1:39, 1:39] -6.69e-05 -4.63e-05 -1.60e-06 5.73e-05 1.12e-04 .....$ : num [1:39, 1:39] 1.40e-04 1.15e-04 6.68e-05 -3.77e-19 -7.57e-05 ...
.......

第一个子列表(gaborArray)由复杂类型的40个矩阵(5个刻度×8个方向)组成,其中每个matix的尺寸为39 x 39(gabor滤波器)。第二个子列表(gabor_imaginary)是虚部(数字),而第三个子列表是实部(gabor_real)。实部(数字)用于绘制gabor滤波器。

该文档包含所使用的每个参数的更多详细信息。

gabor_feature_extraction

gabor_feature_extraction方法提取图像的Gabor特征。与初始Matlab代码相比,此方法得到修改,以便用户可以选择对图像进行下采样或对特征进行标准化。此外,我添加了Magnitude功能,因为根据文献,它提高了可预测性。

基于前面提到的car.png图像,

# read image
#-----------pth_im = system.file("tmp_images", "car.png", package = "OpenImageR")im = readImage(pth_im) * 255# gabor-feature-extract
#----------------------gb_im = init_gb$ (image = im, scales = 5,  ,downsample_rows = NULL,downsample_col , plot_data = TRUE, normalize_features = FALSE, threads = 3)

此函数再次返回长度为3的列表,

 

其中gaborFeatures是提取的特征,其行数等于nrow(im)x ncol(im)(或166 x 249),列数等于scale x orientationations(或5 x 8)。第二和第三个子列表是与gabor滤波器卷积后得到的图像的虚部和实部。以下代码块允许用户绘制图像的不同比例方向

plt_im = init_gb$plot_gabor(real_matrices = gb_im$  , thresholding = FALSE)

通过将gb_im $ gabor_features_real对象(比例,方向)阈值化为 [0,1],可以直观地探索图像,

# thresholding parameter is set to TRUE
#--------------------------------------plt_im_thresh = init_gb$plot_gabor(real_matrices   ,margin_btw_plots = 0.65, thresholding = TRUE)

gabor_feature_engine

gabor_feature_engine方法是初始Matlab代码的扩展,并且允许用户从多个图像中提取Gabor特征。此方法的工作方式与HOG_apply方法相同,后者采用图像矩阵(如mnist数据集),并在处理后返回要素。以下示例说明如何将gabor_feature_engine方法与mnist数据集一起使用,

mnist <- read.table(unz("mnist.zip", "mnist.csv"), nrows = 70000, header = T, quote = "\"", sep = ",")dat = init_gb$gabor_feature_engine(img_data = x, img_nrow = 28, img_ncol = 28,scales = 4, orientations = 8, gabor_rows = 13,gabor_columns = 13, downsample_gabor = FALSE,downsample_rows = NULL, downsample_cols = NULL,normalize_features = FALSE, threads = 6, verbose = TRUE)Time to complete : 4.111672 mins 
 str(dat)
List of 2$ magnitude      : num [1:70000, 1:3136] 0 0 0 0 0 0 0 0 0 0 ...$ energy_aptitude: num [1:70000, 1:64] 2682 2576 1399 1178 2240 ...

DAT目的是长度为2的列表中的第一子列表对应于幅度,而第二子列表到本地能量均值性向。在计算mnist数据的准确性之前要做的第一件事是减少幅度特征的维数(我将使用irlba包来实现此目的),

 

并且我将创建一个缩小幅度能量 - 能力数据的中心缩放矩阵,

 

然后我将利用nmslibR库(近似方法'hnsw')来计算mnist数据的准确性,

 
 

我将使用HOG_apply函数执行相同的操作

 
 

通过平均gaborHoG特征,平均准确度增加到98.34%,这非常接近于KernelKnn(98.4)的HoG +强力方法的得分,

 

非常感谢您阅读本文,有任何问题请在下面留言!

拓端tecdat|R语言Gabor滤波进行目标图像纹理特征的提取相关推荐

  1. Gabor滤波进行目标图像纹理特征的提取

    1.傅里叶变换 1) 简介 数字图像处理的方法主要分成两大部分:空域分析法和频域分析法.空域分析法就是对图像矩阵进行处理:频域分析法是通过图像变换将图像从空域变换到频域,从另外一个角度来分析图像的特征 ...

  2. 拓端tecdat|R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险

    最近我们被客户要求撰写关于冠心病风险的研究报告,包括一些图形和统计输出. 相关视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠 ...

  3. 拓端tecdat|R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测

    最近我们被客户要求撰写关于LOESS(局部加权回归)的研究报告,包括一些图形和统计输出. 这篇文章描述了一种对涉及季节性和趋势成分的时间序列的中点进行建模的方法.我们将对一种叫做STL的算法进行研究, ...

  4. 拓端tecdat|R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系

    最近我们被客户要求撰写关于向量误差修正模型的研究报告,包括一些图形和统计输出. 向量自回归模型估计的先决条件之一是被分析的时间序列是平稳的.但是,经济理论认为,经济变量之间在水平上存在着均衡关系,可以 ...

  5. 拓端tecdat|R语言线性回归和时间序列分析北京房价影响因素可视化案例

    最近我们被客户要求撰写关于北京房价影响因素的研究报告,包括一些图形和统计输出. 目的 房价有关的数据可能反映了中国近年来的变化: 人们得到更多的资源(薪水),期望有更好的房子 人口众多 独生子女政策: ...

  6. 拓端tecdat荣获掘金社区入驻新人奖

    2021年7月,由掘金发起了"入驻成长礼"颁奖活动.本次活动邀请到知名开发者.服务机构代表等业界人士. 据了解,掘金社区"新入驻创作者礼"主要对已经积累了一定历 ...

  7. 拓端tecdat荣获2022年度51CTO博主之星

    相信技术,传递价值,这是51CTO每一个技术创作者的动力与信念,2022 年度,拓端tecdat 作为新锐的数据分析咨询公司,在51CTO平台上,不断的输出优质的技术文章,分享前沿创新技术,输出最佳生 ...

  8. R语言str_subset函数和str_which函数:str_subset函数提取字符串向量中所有包含匹配字符的字符串、str_which函数返回字符串向量中所有包含匹配字符的位置(索引)

    R语言str_subset函数和str_which函数:str_subset函数提取字符串向量中所有包含匹配字符的字符串.str_which函数返回字符串向量中所有包含匹配字符的位置(索引) 目录

  9. R语言ggplot2可视化:为图像中的均值竖线、中位数竖线、 geom_vline添加图例(legend)

    R语言ggplot2可视化:为图像中的均值竖线.中位数竖线. geom_vline添加图例(legend) 目录

  10. R语言ggplot2可视化在可视化图像中添加上限线条、下限线条、添加上下限图例实战

    R语言ggplot2可视化在可视化图像中添加上限线条.下限线条.添加上下限图例实战 目录

最新文章

  1. 使用VS自带的混淆器防止你的程序被反编译
  2. 计算机网络-网络层(一)
  3. SpringBoot使用CommandLineRunner和ApplicationRunner项目初始化事件
  4. android学习笔记九——RatingBar
  5. codeforces 337D Book of Evil(dp)
  6. 【python】字典与集合的练习题
  7. 横岗无线充android,史上第一款“真无线充”,真正实现随时随地无线充电!
  8. 一文讲透 Serverless Kubernetes 容器服务
  9. linux基本命令学习(一)文件处理命令
  10. 待熟悉的工具或API清单列表
  11. Vue Element校验validate
  12. zTree模糊搜索(子级和父级都不匹配时隐藏节点)
  13. 服务器硬盘毁了如何修复,windows服务器下硬盘出现故障应如何进行修复
  14. ppt编辑数据链接文件不可用_excel表格编辑数据不可用-ppt插入的自带图表点击编辑数据时显示链接文件不可用...
  15. 09.mtk背光流程
  16. 「拓数派(OpenPie)2022 发布会实录 」PieCloudDB Database 社区版与商业版产品总览
  17. 自媒体视频搬运,技术分享给大家!
  18. 【Unity脚本】鼠标常用点击事件
  19. Pygame小游戏:植物大战僵尸游戏真的有“毒”?戒不掉啊~
  20. 强大的 Python 信号库:blinker 入门教程

热门文章

  1. 基于IHttpAsyncHandler的TCP收发器
  2. 【车道线检测与寻迹】4月17 【多方内容总结】大模块:车辆检测,车道线检测,车辆压线判别
  3. slam的回顾(一)
  4. 凸优化第六章逼近与拟合 6.4 鲁棒逼近
  5. 前端开发中,如何优化图像?图像格式的区别?
  6. Docker 安装(学习笔记一)
  7. [LeetCode]Patching Array
  8. 第一次冲刺-个人工作总结06
  9. 线程执行者(八)执行者周期性地运行一个任务
  10. VirtualBox中安装Android-x86详解