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. IAsyncResult 接口

    IAsyncResult 接口由包含可异步操作的方法的类实现.它是启动异步操作的方法的返回类型,如 FileStream.BeginRead,也是结束异步操作的方法的第三个参数的类型,如 FileSt ...

  2. nyoj576 集齐卡片赢大奖(一)

    集齐卡片赢大奖(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 小时候你一定曾经为收集一套三国人物的卡片而买过不少零食吧?这些小吃的袋子里一般都会有一张卡片,如 ...

  3. ny488 素数环

    素数环 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环. 为了简便起 ...

  4. ADO.NET 连接方式进行数据库访问

    转自:http://www.cnblogs.com/oneword/archive/2010/09/10/1823414.html 连接到数据源 连接到数据源需要使用两步: 1.创建连接字符串 2.使 ...

  5. 引用第三方高德地图接口---使用js脚本进行开发地图定位的步骤

    ①在高德地图开发平台注册一个账号,获取key ②添加新的key ③引入map插件 ④复制过来map的脚本代码和编写搜索框 <script type="text/javascript&q ...

  6. ospf动态路由配置(单区域)

    命令: Router(config-router)#network 目标网络号 反子网掩码 area 区域号 示例: Router(config-router)#network 10.2.2.0 0. ...

  7. 利用struts2<s:token>标签防止用户重复提交

    当用户填写完表单后,在提交过一次后,若用户做如下操作比如再次点击提交.刷新页面.提交页面呈现后点击后退按钮,都会导致表单重复提交.如果信息需要存储到后台数据库中,重复提交就会再次向数据库中插入用户信息 ...

  8. 函数调用前有"::"符号,什么意思啊?

    struct ifreq ifrf; ::memset(&ifrf,0,sizeof(ifrf)); ::strncpy(ifrf.ifr_name, ifr[addrCount].ifr_n ...

  9. SO_REUSEADDR的作用

    服务器socketstreamtcpc 原贴地址:http://topic.csdn.net/u/20090103/16/a0414edb-b289-4c72-84da-39e155e8f4be.ht ...

  10. 使用Spring MVC统一异常处理实战<转>

    1 描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合 ...