BDIP和BVLC纹理分析
Young Deok Chun 等人提出了基于 BVLC 矩和 BDIP 矩的一种纹理分析方法。BVLC 能显示粗糙和光滑特性,BDIP 能够很好的提取波谷和边缘。它们直接在彩色空间上进行处理,能有效的结合颜色特征。
BDIP&BVLC
BDIP(block difference of inverse probabilities),基于块的逆转概率。描述了在一个M*M大小的块内,像素值变化的快慢,计算的BDIP值越大,原图像像素值变化越剧烈。
BVLC(block-based of variation of local correlation coefficients),基于块的局部相关系数。描述了一个像素点与周围四个方向(-90, 0, -45, 45)的相关度,计算的BVLC值越大,原图像越粗糙。
I(i, j)表示属于M*M块中某一个像素值 。
四个方向位移。
像素平移示意图:
k,l分别表示水平和垂直移动 ,I(i, j)表示属于M*M块中某一个像素值,O(4)表示四个平移方向
σ(k,l)表示在平移后M*M像素块里的标准差 ,σ(0,0)表示当前M*M块的标准差
μ(k,l)表示在平移后M*M像素块里的均值 ,μ(0,0)表示当前M*M块的均值
BDIP code:
void bdip(const Mat& src)
{
Mat bdip;
bdip = src.clone(); int nRows;
int nCols;
nRows = src.rows;
nCols = src.cols;
//计算bdip特征图
for(int r = ; r < nRows; ++r)
{
for(int c = ; c < nCols; ++c)
{
float blockValue = 0.0;
int blockSum = ;
int blockMax = ; //边缘不做考虑
if( == r || nRows - == r ||
== c || nCols - == c)
{
blockValue = ;
}
else
{
uchar v1, v2, v3, v4;
v1 = src.ptr<uchar>(r)[c];
v2 = src.ptr<uchar>(r)[c + ];
v3 = src.ptr<uchar>(r + )[c];
v4 = src.ptr<uchar>(r + )[c + ]; blockSum = v1 + v2 + v3 + v4;
blockMax = MAX(MAX(v1, v2), MAX(v3, v4));
blockValue = - blockSum*1.0/blockMax;
} bdip.ptr<uchar>(r)[c] = *blockValue;
}
} #if 1
imshow("bdip", bdip);
cvWaitKey();
#endif return;
}
BVLC code:
struct SHIFTDIRECTION
{
int x;
int y;
};
const SHIFTDIRECTION shift[] = {, , , , , , , , , }; void bvlc(const Mat& src)
{
int nRows;
int nCols;
nRows = src.rows;
nCols = src.cols; //填充边界
Mat tmp;
copyMakeBorder(src, tmp, , , , ,BORDER_REFLECT);
tmp.convertTo(tmp, CV_32FC1, 1.0, ); Mat bvlc;
bvlc = src.clone(); //计算blvc特征图
for(int r = ; r < nRows + ; ++r)
{
for(int c = ; c < nCols + ; ++c)
{
float variance[] = {0.0};
float mean[] = {0.0};
float value[] = {,}; for(int i = ; i < ; ++i)
{
int curR = r + shift[i].x;
int curC = c + shift[i].y; //计算平移后四个像素均值、方差
if(i < )
{
mean[i] =
tmp.ptr<float>(curR)[curC] +
tmp.ptr<float>(curR + )[curC] +
tmp.ptr<float>(curR)[curC + ] +
tmp.ptr<float>(curR + )[curC + ];
mean[i] /= ; variance[i] =
pow((tmp.ptr<float>(curR)[curC] - mean[i]), ) +
pow((tmp.ptr<float>(curR + )[curC] - mean[i]), ) +
pow((tmp.ptr<float>(curR)[curC + ] - mean[i]), ) +
pow((tmp.ptr<float>(curR + )[curC + ] - mean[i]), );
} //最后一个块的位置方向与前三块有区别
else
{
mean[i] =
tmp.ptr<float>(curR)[curC] +
tmp.ptr<float>(curR - )[curC] +
tmp.ptr<float>(curR)[curC + ] +
tmp.ptr<float>(curR - )[curC + ];
mean[i] /= ; variance[i] =
pow((tmp.ptr<float>(curR)[curC] - mean[i]), ) +
pow((tmp.ptr<float>(curR - )[curC] - mean[i]), ) +
pow((tmp.ptr<float>(curR)[curC + ] - mean[i]), ) +
pow((tmp.ptr<float>(curR - )[curC + ] - mean[i]), );
} variance[i] /= ;
variance[i] = sqrt(variance[i]);
} //计算四个方向块与原块的相关系数value[i]
for(int i = ; i < ; ++i)
{
value[i - ] =
tmp.ptr<float>(r)[c]*tmp.ptr<float>(r + shift[i].x)[c +shift[i].y] - mean[]*mean[i] +
tmp.ptr<float>(r + )[c]*tmp.ptr<float>(r + shift[i].x)[c +shift[i].y] - mean[]*mean[i] +
tmp.ptr<float>(r)[c + ]*tmp.ptr<float>(r + shift[i].x)[c +shift[i].y] - mean[]*mean[i] +
tmp.ptr<float>(r + )[c + ]*tmp.ptr<float>(r + shift[i].x)[c +shift[i].y] - mean[]*mean[i]; value[i - ] /= ;
value[i - ] /= (variance[]*variance[i]);
} //获取最大和最小相关系数
float max = value[];
float min = value[]; for(int i = ; i < ; ++i)
{
if(value[i] > max)
{
max = value[i];
} if(value[i] < min)
{
min = value[i];
}
} //计算BLVC数值
bvlc.ptr<uchar>(r - )[c - ] = max - min;
}
} #if 1
imshow("bvlc", bvlc);
waitKey();
#endif return;
}
【转载自】
BDIP-BVLC纹理 - xxxxyxxxx的博客 - CSDN博客 https://blog.csdn.net/xxxxyxxxx/article/details/76358491
Image retrieval using bdip and bvlc moments_百度学术 http://xueshu.baidu.com/usercenter/paper/show?paperid=6fe4e1826e57f7007558cb9414214fd3&site=xueshu_se
BDIP和BVLC纹理分析的更多相关文章
- tensorflow版的bvlc模型
研究相关的图片分类,偶然看到bvlc模型,但是没有tensorflow版本的,所以将caffe版本的改成了tensorflow的: 关于模型这个图: 下面贴出通用模板: from __future__ ...
- BVLC CaffeNet可视化及类别预测
一.介绍 bvlc_reference_caffenet网络模型是由AlexNet的网络模型改写的,输入图片尺寸大小为227x227x3,输出的为该图片对应1000个分类的概率值. 介绍参考:caff ...
- caffe-windows环境配置(github上官方BVLC/caffe的推荐配置方法详解)
[转载来的文章:如有侵权,请联系我!我将马上删除!] 首先声明一下,如标题,本教程是caffe在windows系统上的配置方法,而且是github上官方BVLC/caffe目前推荐的配置方法,并不是使 ...
- windows10下基于docker的bvlc/caffe环境搭建与使用
docker 安装参见docker官网,当cmd出现以下图像时安装正确; 然后进行bvlc/caffe环境创建,有两种,一种是直接pull github的bvlc,一种是本地创建image,直接使用g ...
- 基于英特尔® 至强™ 处理器 E5 产品家族的多节点分布式内存系统上的 Caffe* 培训
原文链接 深度神经网络 (DNN) 培训属于计算密集型项目,需要在现代计算平台上花费数日或数周的时间方可完成. 在最近的一篇文章<基于英特尔® 至强™ E5 产品家族的单节点 Caffe 评分和 ...
- 基于英特尔® 至强 E5 系列处理器的单节点 Caffe 评分和训练
原文链接 在互联网搜索引擎和医疗成像等诸多领域,深度神经网络 (DNN) 应用的重要性正在不断提升. Pradeep Dubey 在其博文中概述了英特尔® 架构机器学习愿景. 英特尔正在实现 Prad ...
- Caffe Python MemoryDataLayer Segmentation Fault
转载请注明出处,楼燚(yì)航的blog,http://home.cnblogs.com/louyihang-loves-baiyan/ 因为利用Pyhon来做数据的预处理比较方便,因此在data_l ...
- ubuntu16.04配置py-faster-rcnn
在ubuntu16.04下编译安装了py-faster-rcnn. 主要步骤包括:安装cuda/cudnn,换apt源,装开源显卡驱动,装caffe依赖的apt包和python包,下载py-faste ...
- Linux下的几个好用的命令与参数
将所有文件的编码,转换为UTF-8 find . ! -type d -exec enca -L zh_CN -x UTF-8 {} \; 将指定目录下所有文件权限设定为644 find . ! -t ...
随机推荐
- 关于python调用zabbix api接口
因公司业务需要,引进了自动化运维,所用到的监控平台为zbbix3.2,最近正在学习python,计划使用python调用zabbix api接口去做些事情,如生成报表,我想最基本的是要取得zabbix ...
- 简单了解一下c编译过程
大一的时候,学习c语言,用的是VC6.0.用了1年多,到后来了解了Linux,知道了gcc编译器,开始使用gcc Hello.c -o a.out 这样的命令进行编译.后来又学了gcc的一些其他的命令 ...
- 百度Android在线语音识别SDK用法
百度Android语音识别SDK分在线与离线两种,这篇文章介绍在线SDK的用法. 在线SDK是以JAR包和动态链接库形式公布和使用,能够从百度开放云平台站点中下载SDK及使用说明文档. title=d ...
- prequeue receive queue backlog queue
prequeue和backlog和receive 5.6 TCP prequeue http://blog.csdn.net/u011130578/article/details/44814201 t ...
- 详解Base64编码和解码
Base64是最常用的编码之一,比如开发中用于传递参数.现代浏览器中的<img />标签直接通过Base64字符串来渲染图片以及用于邮件中等等.Base64编码在RFC2045中定义,它被 ...
- HttpClient 教程 (一)
转自:http://www.cnblogs.com/loveyakamoz/archive/2011/07/21/2112804.html HttpClient 教程 (一) 前言 超文本传输协议 ...
- form action中如何填写相对目录
举个例子,你在web-root文件夹有个a.html需要向/web-root/jsp/b.jsp提交form,怎么做 网上看到了一个解决方案,但是要求a是jsp页面而不是html页面 <%!St ...
- gvim配置到命令行可以使用
下载安装gvim后,把gvim的安装目录添加到环境变量.
- 10分钟-jQuery过滤选择器
1.:first过滤选择器 本次我们介绍过滤选择器,该类型的选择器是依据某过滤规则进行元素的匹配.书写时以":"号开头,通经常使用于查找集合元素中的某一位置的单个元素. 在jQue ...
- DataTable某一列的最大值
.datatable.compute("max(列名)","") eg: int max_Idx_Number = 1; int.TryParse(C ...