二值图像剪切算法

时间:2011-05-24 15:56:37

标签: algorithm language-agnostic image-processing

我正在寻找一种简单的剪切算法。要剪切的图像是二进制(0-背景像素,1-前景像素),由2D阵列表示。它将用于手写数字斜面校正,因此剪切只需要在x轴上完成。

我找到了一些数学解释,但不确定如何正确实现它。

谢谢!

1 个答案:

答案 0 :(得分:3)

从底行开始循环遍历行,并跟踪沿x轴的当前像素移位(作为浮点数或定点数)。在每一行之后,您将移位增加所需的恒定斜率。出于绘图目的,您可以在每一行获取相应像素移动的最接近整数。

在伪代码中,这将是:

slope = 0.2; // one pixel shift every five rows
shift = 0.0; // current pixelshift along x-axis
for (row = rows-1; row>=0; row--) {
  integershift = round(shift)  // round to nearest integer
  for (column = columns-1; column>=0; column--) {
    sourcecolumn = column + integershift;  // get the pixel from this column
    if (sourcecolumn < columns)
      outputImage[row][column] = inputImage[row][sourcecolumn];
    else  // draw black if we're outside the inputImage
      outputImage[row][column] = 0;
  }
  shift += slope;
}

这基本上是Bresenham line drawing algorithm,所以你应该找到很多实现细节。