dilateArtifact function
Applies dilation morphological operation to a binary image.
Dilation expands the white regions in a binary image, which helps connect nearby text elements and fill small gaps in characters.
Implementation
Artifact dilateArtifact({
required final Artifact matrixImage,
required int kernelSize,
}) {
final Artifact result = Artifact(matrixImage.cols, matrixImage.rows);
final int halfKernel = kernelSize ~/ 2;
final int width = matrixImage.cols;
final int height = matrixImage.rows;
// Pre-compute row boundaries for each y position
final List<int> minKYs = List<int>.filled(height, 0);
final List<int> maxKYs = List<int>.filled(height, 0);
for (int y = 0; y < height; y++) {
minKYs[y] = max(0, y - halfKernel);
maxKYs[y] = min(height - 1, y + halfKernel);
}
// Pre-compute column boundaries for each x position
final List<int> minKXs = List<int>.filled(width, 0);
final List<int> maxKXs = List<int>.filled(width, 0);
for (int x = 0; x < width; x++) {
minKXs[x] = max(0, x - halfKernel);
maxKXs[x] = min(width - 1, x + halfKernel);
}
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
if (matrixImage.cellGet(x, y)) {
for (int ky = minKYs[y]; ky <= maxKYs[y]; ky++) {
for (int kx = minKXs[x]; kx <= maxKXs[x]; kx++) {
result.cellSet(kx, ky, true);
}
}
}
}
}
return result;
}