我正在编写一种方法来从二进制图像(背景为黑色)中提取细白线。本质上,代码循环遍历图像并找到同一行中的连续白色像素,将它们全部变为黑色,最后将中间的像素变为白色。该算法可以很好地细化线条,但会产生随机的水平虚线,而这些虚线根本不应该有任何东西。下面是一个例子:
图像细线来自:
算法运行后的图像:
显然,图像顶部和底部附近的虚线不应该存在,因为原始图像中没有白色区域,但它们是以某种方式生成的。我附上了我的代码来做下面的细化,非常感谢任何帮助!
//Line thining
double[] rgbCanny;
int inARow = 0;
for(int i = 0; i < noiseReducedCanny.size().height; i++) {
for(int j = 0; j < noiseReducedCanny.size().width; j++) {
rgbCanny = noiseReducedCanny.get(i, j);
if(rgbCanny[0] == 255) {
inARow++;
} else {
if(inARow != 0 && inARow % 2 == 1) {
int middle = (int) Math.ceil(j - inARow / 2.0);
for(int x = j - inARow; x < j; x++) {
noiseReducedCanny.put(i, x, new double[]{0, 0, 0});
}
noiseReducedCanny.put(i, middle, new double[]{255, 255, 255});
} else if (inARow != 0 && inARow % 2 == 0) {
int middle = j - inARow / 2;
for(int x = j - inARow; x < j; x++) {
noiseReducedCanny.put(i, x, new double[]{0, 0, 0});
}
noiseReducedCanny.put(i, middle, new double[]{255, 255, 255});
}
inARow = 0;
}
}
}
慕的地8271018
相关分类