我有这个程序来检测二值化 BufferedImage 中的对象,该图像是多选答题纸。
我正在尝试使用 4-Connectivity 来检测每个对象(工作表上的答案)。
到目前为止,我手头的来源是这些:
- http://en.wikipedia.org/wiki/Connected-component_labeling
- http://homepages.inf.ed.ac.uk/rbf/HIPR2/label.htm
我想出了这个,按照维基百科的说明:
if(getPixel(image, x, y) != 0){
if(getPixel(image, x-1, y) !=0){
System.out.println("we are in the same region");
region[x][y] = region[x-1][y];
}
else if(getPixel(image, x-1, y) !=0 && getPixel(image, x, y-1) !=0){
System.out.println("North and West pixels belong to the same region and must be merged");
region[x][y] = Math.min(region[x-1][y], region[x][y-1]);
}
else if( getPixel(image, x-1, y) ==0 && getPixel(image, x, y-1) !=0){
System.out.println("Assign the label of the North pixel to the current pixel");
region[x][y] = region[x][y-1];
}
else if(getPixel(image, x-1, y) ==0 && getPixel(image, x, y-1) ==0){
System.out.println("Create a new label id and assign it to the current pixel");
cpt++;
region[x][y] = cpt;
}
但问题是它创建了 51 个区域!它只打印每个对象的几个顶部像素(不是所有像素)。
谁能帮我找出问题所在以及如何检测我的对象?
我将不胜感激任何帮助。