一、纯JAVA开发的技术可行性,即JAVA是否能够实现图像识别的各种算法。
二、如果第一点没有问题,纯JAVA与C++相比,开发效率上的差异。效率要低很多,和具体问题有关。
三、如果第一点没有问题且第二点差异不太大时,纯JAVA与C++相比,相同算法的情况下,软件运行效率的差异。运行效率的差异也很大,也是和具体的算法有关。
摘要图像识别是目前很热门的研究领域,涉及的知识很广,包括信息论、模式识别、模糊数学、图像编码、内容分类等等。本文仅对使用Java实现了一个简单的图像文本二值处理,关于识别并未实现。步骤
建立文本字符模板二值矩阵
对测试字符进行二值矩阵化处理
代码
/*
* @(#)StdModelRepository.java
*
* This program is free softwareyou can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundationeither version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTYwithout even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Library General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this programif not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package cn.edu.ynu.sei.recognition.utilimport java.awt.Imageimport java.awt.image.BufferedImageimport java.io.Fileimport java.io.IOExceptionimport java.util.ArrayListimport java.util.Listimport java.util.logging.Levelimport java.util.logging.Loggerimport javax.imageio.ImageIO/** * Hold character charImgs as standard model repository.
* @author 88250
* @version 1.0.0.0, Mar 20, 2008
*/
public class StdModelRepository {
/** * hold character images
*/ List charImgs = new ArrayList()
/** * default width of a character
*/ static int width = 16 /** * default height of a character
*/ static int height = 28 /** * standard character model matrix
*/ public int[][][] stdCharMatrix = new int[27][width][height]
/** * Default constructor.
*/ public StdModelRepository() {
BufferedImage lowercase = null try {
lowercase = ImageIO.read(new File("lowercase.png"))
} catch (IOException ex) {
Logger.getLogger(StdModelRepository.class.getName()).
log(Level.SEVERE, null, ex)
}
for (int i = 0 i <26 i++) {
charImgs.add(lowercase.getSubimage(i * width,
0,
width,
height))
}
for (int i = 0 i <charImgs.size()i++) {
Image image = charImgs.get(i)
int[] pixels = ImageUtils.getPixels(image,
image.getWidth(null),
image.getHeight(null))
stdCharMatrix[i] = ImageUtils.getSymbolMatrix(pixels, 0).clone()
ImageUtils.displayMatrix(stdCharMatrix[i])
}
}
}
/*
* @(#)ImageUtils.java
*
* This program is free softwareyou can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundationeither version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTYwithout even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Library General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this programif not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package cn.edu.ynu.sei.recognition.utilimport java.awt.Imageimport java.awt.image.PixelGrabberimport java.util.logging.Levelimport java.util.logging.Logger/** * Mainipulation of image data.
* @author 88250
* @version 1.0.0.3, Mar 20, 2008
*/
public class ImageUtils {
/** * Return all of the pixel values of sepecified <code>image<.>* @param image the sepecified image
* @param width width of the image
* @param height height of the image
* @return */ public static int[] getPixels(Image image, int width, int height) {
int[] pixels = new int[width * height]
try {
new PixelGrabber(image, 0, 0, width, height, pixels, 0, width).grabPixels()
} catch (InterruptedException ex) {
Logger.getLogger(ImageUtils.class.getName()).
log(Level.SEVERE, null, ex)
}
return pixels
}
资源来自:
http://blog.csdn.net/chief1985/article/details/2229572