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纹理分析的更多相关文章

  1. tensorflow版的bvlc模型

    研究相关的图片分类,偶然看到bvlc模型,但是没有tensorflow版本的,所以将caffe版本的改成了tensorflow的: 关于模型这个图: 下面贴出通用模板: from __future__ ...

  2. BVLC CaffeNet可视化及类别预测

    一.介绍 bvlc_reference_caffenet网络模型是由AlexNet的网络模型改写的,输入图片尺寸大小为227x227x3,输出的为该图片对应1000个分类的概率值. 介绍参考:caff ...

  3. caffe-windows环境配置(github上官方BVLC/caffe的推荐配置方法详解)

    [转载来的文章:如有侵权,请联系我!我将马上删除!] 首先声明一下,如标题,本教程是caffe在windows系统上的配置方法,而且是github上官方BVLC/caffe目前推荐的配置方法,并不是使 ...

  4. windows10下基于docker的bvlc/caffe环境搭建与使用

    docker 安装参见docker官网,当cmd出现以下图像时安装正确; 然后进行bvlc/caffe环境创建,有两种,一种是直接pull github的bvlc,一种是本地创建image,直接使用g ...

  5. 基于英特尔® 至强™ 处理器 E5 产品家族的多节点分布式内存系统上的 Caffe* 培训

    原文链接 深度神经网络 (DNN) 培训属于计算密集型项目,需要在现代计算平台上花费数日或数周的时间方可完成. 在最近的一篇文章<基于英特尔® 至强™ E5 产品家族的单节点 Caffe 评分和 ...

  6. 基于英特尔® 至强 E5 系列处理器的单节点 Caffe 评分和训练

    原文链接 在互联网搜索引擎和医疗成像等诸多领域,深度神经网络 (DNN) 应用的重要性正在不断提升. Pradeep Dubey 在其博文中概述了英特尔® 架构机器学习愿景. 英特尔正在实现 Prad ...

  7. Caffe Python MemoryDataLayer Segmentation Fault

    转载请注明出处,楼燚(yì)航的blog,http://home.cnblogs.com/louyihang-loves-baiyan/ 因为利用Pyhon来做数据的预处理比较方便,因此在data_l ...

  8. ubuntu16.04配置py-faster-rcnn

    在ubuntu16.04下编译安装了py-faster-rcnn. 主要步骤包括:安装cuda/cudnn,换apt源,装开源显卡驱动,装caffe依赖的apt包和python包,下载py-faste ...

  9. Linux下的几个好用的命令与参数

    将所有文件的编码,转换为UTF-8 find . ! -type d -exec enca -L zh_CN -x UTF-8 {} \; 将指定目录下所有文件权限设定为644 find . ! -t ...

随机推荐

  1. 【Android】10.5 滚动视图(RecyclerView)

    分类:C#.Android.VS2015: 创建日期:2016-02-19 一.简介 滚动视图(RecyclerView)的用法与布局控件的用法类似,唯一不同的是,所有布局控件中都可以包含多个组件,而 ...

  2. coreos 创建使用密钥登陆的ubuntu 基础镜像

    下载官方镜像 core@localhost ~ $ docker pull ubuntu:14.04 #假设官方下载较慢,可到www.dockerpool.com下载标准镜像 core@localho ...

  3. onethink后台边栏,添加新的方法后不显示,是需要在后台系统中添加功能,如下图

  4. css3导航hover悬停效果

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  5. linux命令之数据盘格式化挂载

    1,查看数据盘 在没有分区和格式化数据盘之前,使用”df -h “命令是无法看到数据盘的,可以通过 fdisk -l 查看机器情况(找出所有硬盘个数及设备名称)  提示:若没有发现/dev/xvdb ...

  6. Pro mvvm读书笔记mvvm中的VM

    一.构建ViewModels 设计模式的其中一个目标就是抽象构造一个给出指定类型的对象或者实现指定类型的接口的过程.需要把类给客户端,让客户端去使用,但是要隐藏类是具体的实现细节. 1.1The Ap ...

  7. CAD常见问题

    CAD2016显示线宽点界面右下角三道杠[自定义]按钮,找到并勾选[线宽]. 导出部分图形为JPG图片1. 将想要导出的图形显示于屏幕正中.2. 打开打印窗口(快捷键Ctrl+P).3. 选打印机(虚 ...

  8. Linux 网络子系统之NAPI书签

    只是一个书签 http://blog.csdn.net/ustc_dylan/article/details/6116334

  9. Mac中Java 配置maven及阿里云镜像

    一:配置maven 1.下载maven,选择Binary tar.gz,解压拷贝到目录/usr/local/ 1 https://maven.apache.org/download.cgi 2.配置系 ...

  10. jquery对象和javascript的dom对象转换

    Jquery框架为jquery对象定义了独立使用的方法和属性,它无法直接调用dom对象的方法,dom对象也无法直接调用jquery对象的方法和属性. Jquery对象和dom对象是可以相互转换的,因为 ...