APP下载

一种颜色直方图计算相似度的资产图片核对算法

2018-05-23王宁邦徐博夏百川夏娜邰永航李琼

智能计算机与应用 2018年2期

王宁邦 徐博 夏百川 夏娜 邰永航 李琼

摘 要: 固定资产清查是高校、企事业、科研院所等的一项例行性工作,资产清查过程中一般要求对固定资产拍照存档。资产清查收集到的资产图片保存至文件夹,其中有成千上万张资产图片,需要从中挑出来一部分资产图片丢弃,且需要被挑出来的资产有图有真相地存放在其它文件夹,同时2个文件夹中资产图片文件名、清晰度、大小等均不一,针对如何快速完成这个图片文件挑选过程,文中提出一种基于颜色直方图的资产图片相似度统计核对算法,并对其过程进行了验证,证明了算法的有效性。

关键词: 资产清查;颜色直方图;图片相似度

Abstract:Fixed assets inventory is a routine work in colleges and universities enterprise and institution research institutes etc.. In the process of asset inventory it is generally required to take photos of fixed assets.There are thousands of images in the asset-image file collected by asset assessment. As required part of the assets should be picked out and these picked assets need to be put into another file meanwhile its asset images in two folders have different file name definition and size. Aiming at how to complete the process quickly this paper puts forward the algorithm based on color histogram for gathering statistics and checking asset image similarity. After that the process is verified and the effectiveness of the algorithm is also proved.

Key words: asset inventory;color histogram;picture similarity

引言

随着多媒体技术及Internet技术的迅速发展 各行各业对图像的使用日益广泛 图像信息资源的管理和检索也越发重要。通过手工标记和索引图像的传统方法已经难以满足现实需求,因而亟待设计推出有效研发方法。目前,颜色直方图的应用研究普遍存在于图像检索、目标跟踪粒子滤波[1]、遥感等各个领域。其中,王向阳[2]等人基于视觉权值的分块颜色直方图图像相似度计算提出了一种新方法用于图像检索;姜兰池[3]等也发表了一种新的基于HSV非均匀量化分块颜色直方图的图像检索方法;胡屹群[4]等人结合视觉词袋模型和颜色直方图探讨给出了一种遥感影像检索方法;张俊杰[5]等人利用颜色直方图进行二次识别实现了排除误检区域和敌我识别双重功能;邵建荃[6]将颜色直方图、SURF特征、时间信息三者相结合进行车辆跟踪。

固定资产清查是高校、企事业、科研院所等部门的一项常规例行性工作,资产清查过程中一般要求对固定资产拍照存档。资产清查将收集到的资产图片保存至文件夹,其数目甚至可达成千上万张,需要从中挑选出一部分资产图片,且将这部分资产图片及详情资料存放在其它文件夹,与此同时2个文件夹中资产图片文件名、清晰度、大小等均为不一。针对如何减少人工消耗并明显缩短图片文件挑选过程时间,文中设计提出了一种基于颜色直方图相似度计算的资产图片核对算法。

1 颜色直方图的相似度计算方法原理

通过将原始图像与待比较图像的像素数据进行采集,生成特定的直方图数据,运用巴氏系数[7-10](Bhattacharyya coefficient)算法,计算出2个图像的相似程度,数值在[0 1]之间,0表示极其不同,1表示极其相似(相同)。

1.1 直方图计算

文中采用的是单一直方图,每个颜色的值范围为0 ~ 255。假定将颜色分为一定范围等份,如果分为16等份的话,此时每个等份值范围为16,再假设RGB值为(14 68 221),16等份后,其所对应直方图索引值(index)分别为: (0 4 13)。研究推得,索引值的计算公式为:

1.2 巴氏系数计算

巴氏系數[3]数学运算公式为:

其中,p p′分别表示原始与待比较的图像直方图数据,对2个图像中的每一个第i部分数据点相乘后进行开平方再相加得到的值就是图像相似度值。

2 资产核对算法设计流程与实现

2.1 算法流程

(1)初始化待处理数据源、比较数据源、目标数据结果。

(2)分析处理内容为:

① 提取待处理数据源中一张图片,与目标数据源进行图像匹配,达到设定阈值的图片便是目标数据,将该目标文件复制到指定文件夹;

②如果待处理数据源资产还未为空,则循环执行 ①。

2.2 实现过程

(1)开始;读取文件(待处理图片文件、比较对象图片文件)路径。

(2)打开待处理图片文件。

(3)打开比较对象图片文件。

(4)比较2张图片相似度。

(5)将比较结果提供一定处理:复制、删除等。

(6)循环以上读取到复制的过程;结束。

2.3 重點程序代码设计

(1)核心代码处理。研发代码如下:

String fileurl = "C:\\Tepfile\\backgrounds";

String fileurl2 = "C:\\Tepfile\\image";

ArrayList anArray = ReadFile.traverseFolder1(fileurl);

ArrayList anArray2 = ReadFile.traverseFolder1(fileurl2);

for (int i = 0;i < anArray.size();i++) {

try {

sourceImage = null;

sourceImage = ImageIO.read(new File InputStream(anArray.toArray()[i].toString()));

this.repaint();

} catch (FileNotFoundException e1) {

e1.printStackTrace();

} catch (IOException e1) {

e1.printStackTrace();

}

repaint();

for (int i1 = 0;i1 < anArray2.size();i1++) {

try {

candidateImage = null;

candidateImage = ImageIO.read(new FileInputStream(anArray2.toArray()[i1].toString()));

ImageComparer imageCom = new Image Comparer(sourceImage,candidateImage);

similarity = imageCom.modelMatch();

System.out.println(similarity);

this.repaint();

} catch (FileNotFoundException e1) {

e1.printStackTrace();

} catch (IOException e1) {

e1.printStackTrace();

}

}

}

(2)相似度计算。研发代码可见如下:

public double modelMatch() {

HistogramFilter hfilter = new HistogramFilter();

float[] sourceData = hfilter.filter(source Image null);

float[] candidateData = hfilter.filter(candidate Image null);

double[] mixedData = new double[source Data.length];

for(int i=0;i

mixedData[i] = Math.sqrt(sourceData[i] * candidateData[i]);

}

double similarity = 0;

for(int i=0;i

similarity += mixedData[i];

}

return similarity;

}

(3)直方图数据采集。实现时可运行如下代码:

public float[] filter(BufferedImage src BufferedImage dest) {

int width = src.getWidth();

int height = src.getHeight();

int[] inPixels = new int[width*height];

float[] histogramData = new float[redBins * greenBins * blueBins];

getRGB( src 0 0 width height inPixels );

int index = 0;

int redIdx = 0 greenIdx = 0 blueIdx = 0;

int singleIndex = 0;

float total = 0;

for(int row=0;row

int ta = 0 tr = 0 tg = 0 tb = 0;

for(int col=0;col

index = row * width + col;

ta = (inPixels[index] >> 24) & 0xff;

tr = (inPixels[index] >> 16) & 0xff;

tg = (inPixels[index] >> 8) & 0xff;

tb = inPixels[index] & 0xff;

redIdx = (int)getBinIndex(redBins tr 255);

greenIdx = (int)getBinIndex (greenBins tg 255);

blueIdx = (int)getBinIndex(blueBins tb 255);

singleIndex = redIdx + greenIdx * redBins + blueIdx * redBins * greenBins;

histogramData[singleIndex] += 1;

total += 1;

}

}

for (int i = 0;i < histogramData.length;i++)

{

histogramData[i] = histogramData[i] / total;

}

return histogramData;

}

private float getBinIndex(int binCount int color int colorMaxValue) {

float binIndex = (((float)color)/ ((float) colorMaxValue)) * ((float)binCount);

if(binIndex >= binCount)

binIndex = binCount- 1;

return binIndex;

}

public int[] getRGB( BufferedImage image int x, int y, int width, int height int[] pixels ) {

int type = image.getType();

if ( type == BufferedImage.TYPE_INT_ARGB || type == BufferedImage.TYPE_INT_RGB )

return (int [])image.getRaster().getDataElements( x y width height pixels );

return image.getRGB( x y width height pixels 0 width );

}

3 算法驗证

过程处理的运行界面如图1所示。

颜色直方图是在许多图像检索系统中已获得广泛采用的颜色特征,算法简单方便,经过多次试验,如图1中相似度为0.955 325 295 373 811 1的情况,是由于2个资产的色调高度相同所致,所以研究将最高阈值设置为大于等于0.999 999 99,即只有相似度到达这个数值,才会判定为是2个相同的资产。阈值的设定需要自定义。

实验模拟从16张资产图片中挑选出7张,相似度计算数值如图2所示,可见其中有一张相似度近似为1满足丢弃的要求。

资产图片相似度计算过程耗时则如图3所示。

4 结束语

文中针对国有资产清查事件中遇到的图片核对过程工作量大等特点,设计提出了基于颜色直方图相似度计算的资产核对算法。首先分析探讨颜色直方图的基础算法原理,而后论述了文中研发的算法流程和实现过程,最后则对算法的应用进行了有效性验证。虽然颜色直方图算法简单、应用普遍,也高效达成了预期研究指定的资产清查图片核对的任务内容,但是相似度计算过程表现出耗时长的特点,这是接下来可以进一步研究和改进的方向。

参考文献

[1] 陶立超,赵宇明. 基于分块颜色直方图和粒子滤波的物体跟踪[J]. 计算机工程与应用,2012,48(7):165-168.

[2] 王向阳,杨红颖,郑宏亮,等. 基于视觉权值的分块颜色直方图图像检索算法[J]. 自动化学报,2010(10):1489-1492.

[3] 姜兰池,沈国强,张国煊. 基于HSV分块颜色直方图的图像检索算法[J]. 机电工程,2009,26(11):54-57.

[4] 胡屹群,周绍光,岳顺,等. 利用视觉词袋模型和颜色直方图进行遥感影像检索[J]. 测绘通报,2017(1):53-57.

[5] 张俊杰,丁淑艳,李伦波. 基于类Haar特征和颜色特征的NAO机器人识别[J]. 计算机与现代化,2017(2):30-35.

[6] 邵建荃. 非重叠场景下多摄像机车辆跟踪研究[J]. 现代计算机(专业版),2017(2):49-53.

[7] BHATTACHARYYA A. On a measure of divergence between two statistical populations defined by their probability distributions[J]. Bulletin of the Calcutta Mathematical Society,1943,35: 99-109.

[8] 王宁邦,刘江涛,梁红飞,等. Cacti在可视化校园网络管理中的应用[J]. 云南民族大学学报(自然科学版),2018,27(2):129-130.

[9] 王宁邦,徐博. 一种桌面门户移动化解决方法[J]. 昆明冶金高等专科学校学报,2017,33(3):53-58.

[10]徐博,王宁邦,陈彬,等. 网络设备故障解决一体化平台初探[J]. 网络安全技术与应用,2016(8):24,26.