java 对图片的灰度直方图的提取并用欧式距离计算其相似度实现图片的检索和分类

freekingmanagerli 2011-05-17 03:14:14
目前正在用java做一个简单的图像分类检索系统,输入1-n张图片,随后图片均被转换为256*256的jpg,然后计算其灰度直方图,然后计算其与图像库里的图片的欧氏距离,归一化后得到相似度。现在的问题在于 1.不知道如何保存其灰度直方图 2.如何计算其与图像库图像的欧氏距离,即得到相似度 3.老师貌似讲过有个对灰度数组降维的处理,用以减少计算量的,不太懂。4.要用到什么BP神经网络,有什么用就不太清楚了,这个问题可忽略

望各位大牛给予指导,非常感谢,以下是我的一个获取图片灰度数组的方法:


public int getGray( String pathname){ ///获取关键图的灰度图数组
int[] rgb=new int[3]; //临时保存单个像素的RGB值
File file=new File(pathname);
BufferedImage bi=null;
try{
bi = ImageIO.read(file);
}catch(Exception e){
e.printStackTrace();
}
int width=bi.getWidth();
int height=bi.getHeight();
int minx=bi.getMinX();
int miny=bi.getMinY();
int []gray=new int[width*height];
int k=0; //标记存放每像素灰度值的数组
for(int i=minx;i<width;i++){
for(int j=miny;j<height;j++){
int pixel=bi.getRGB(i, j);
rgb[0] = (pixel & 0xff0000 ) >> 16 ;
rgb[1] = (pixel & 0xff00 ) >> 8 ;
rgb[2] = (pixel & 0xff );
gray[k]=(int)(rgb[0]*0.3+rgb[1]*0.59+rgb[2]*0.11);
k++;
}
}
System.out.println("width="+width+" "+"height="+height);
return gray[width*height]; //此数组保存该图片的像素的灰度数据
}

...全文
945 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ltforyou 2011-06-04
  • 打赏
  • 举报
回复
try{
bi = ImageIO.read(file);
}catch(Exception e){
e.printStackTrace();
}
int width=bi.getWidth();
int height=bi.getHeight()

我觉得,假设 bi没有读取到文件而是null, 后面int width = bi.getWidth();会是什么情况呢,是不是NullPointException 呢,我想的话,可以把后面需要用到bi的地方都放到try catch里面去.
当然我只是一个新手,不对的地方LZ或者老手指正一下.另外老师给我们讲的时候,涉及到图片放大缩小的好像要用double吧.
freekingmanagerli 2011-05-17
  • 打赏
  • 举报
回复
487行就是这一行:
int width=bi.getWidth();
是不是bi的哪里出错了?
freekingmanagerli 2011-05-17
  • 打赏
  • 举报
回复
对了,给出的这个方法运行出来总出错,不知道错在哪里,能解决这个问题也好

以下是错误提示

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at 图像自动分类检索系统.图像自动分类检索系统View.getGray(图像自动分类检索系统View.java:487)

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧