我最近一直在进行图像处理,我想知道不清晰的蒙版算法是如何工作的。我正在查看Gimp的源代码及其实现,但是到目前为止,我仍然对它的实际工作方式还一无所知。我需要为我正在研究的项目实现它,但是我想真正了解我正在使用的算法。
最佳答案
我也不确定它是如何工作的,但是遇到了一些非常好的页面以了解它。基本上是这样的:
该算法如下:从不清晰的蒙版中查看一个像素,然后找出其亮度(亮度)。如果亮度为100%,请使用高对比度图像中的值作为该像素。如果为0%,则使用原始图像中的值作为该像素。如果介于两者之间,请使用一些权重将两个像素的值混合。 (可选)仅在像素值变化超过一定量时才更改像素值(这是大多数USM对话框中的“阈值”滑块)。
放在一起,您就拥有了自己的形象!
这是一些伪代码:
color[][] usm(color[][] original, int radius, int amountPercent, int threshold) {
// copy original for our return value
color[][] retval = copy(original);
// create the blurred copy
color[][] blurred = gaussianBlur(original, radius);
// subtract blurred from original, pixel-by-pixel to make unsharp mask
color[][] unsharpMask = difference(original, blurred);
color[][] highContrast = increaseContrast(original, amountPercent);
// assuming row-major ordering
for(int row = 0; row < original.length; row++) {
for(int col = 0; col < original[row].length; col++) {
color origColor = original[row][col];
color contrastColor = highContrast[row][col];
color difference = contrastColor - origColor;
float percent = luminanceAsPercent(unsharpMask[row][col]);
color delta = difference * percent;
if(abs(delta) > threshold)
retval[row][col] += delta;
}
}
return retval;
}
注意:我不是图形专家,但是这是我从发现的页面中学到的东西。自己阅读它们并确保您同意我的发现,但是实现以上操作应该足够简单,因此请尝试一下!
引用