• 大小: 5KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: Java
  • 标签: java  识别图片  

资源简介

经过公司CTO的帮助,完成了基于Java语言实现的,相似图像识别,基于直方图比较算法,经过测算此算法优于基于图像指纹的哈希算法.千金难买好代码.

资源截图

代码片段和文件信息

package com.gloomyfish.image.compare;
//Download by http://www.codefans.net
import java.awt.image.BufferedImage;

public class HistogramFilter {

private int redBins;
private int greenBins;
private int blueBins;

public HistogramFilter() {
redBins = greenBins = blueBins = 4;
}

public void setRedBinCount(int redBinCount) {
this.redBins = redBinCount;
}

public void setGreenBinCount(int greenBinCount) {
this.greenBins = greenBinCount;
}

public void setBlueBinCount(int blueBinCount) {
this.blueBins = blueBinCount;
}

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;
         }
        }
        
        // start to normalize the histogram data
        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 );
    }

}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-11-13 09:58  基于Java实现的图像识别\libre-free.com\
     目录           0  2015-01-27 13:21  基于Java实现的图像识别\libre-free.com\ImageComparerUI基于Java语言实现的相似图像识别,基于直方图比较算法\
     文件        2643  2012-11-13 09:58  基于Java实现的图像识别\libre-free.com\ImageComparerUI基于Java语言实现的相似图像识别,基于直方图比较算法\HistogramFilter.java
     文件        1124  2012-11-13 09:58  基于Java实现的图像识别\libre-free.com\ImageComparerUI基于Java语言实现的相似图像识别,基于直方图比较算法\ImageComparer.java
     文件        4378  2012-11-13 10:02  基于Java实现的图像识别\libre-free.com\ImageComparerUI基于Java语言实现的相似图像识别,基于直方图比较算法\ImageComparerUI.java
     目录           0  2015-01-27 13:21  基于Java实现的图像识别\

评论

共有 条评论