我正在寻找一种简单的剪切算法。要剪切的图像是二进制(0-背景像素,1-前景像素),由2D阵列表示。它将用于手写数字斜面校正,因此剪切只需要在x轴上完成。
我找到了一些数学解释,但不确定如何正确实现它。
谢谢!
答案 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,所以你应该找到很多实现细节。