使用Java复制Gimp USM锐化掩码 - OpenCv

时间:2016-01-15 09:14:40

标签: java opencv image-processing implementation gimp

我尝试使用Java和OpenCv在Gimp中复制非锐化掩码。我使用灰度图像作为输入并应用非锐化蒙版,但结果甚至不接近。

我尝试实现这个C ++代码:

Mat blurred; double sigma = 1, threshold = 5, amount = 1;
GaussianBlur(img, blurred, Size(), sigma, sigma);
Mat lowContrastMask = abs(img - blurred) < threshold;
Mat sharpened = img*(1+amount) + blurred*(-amount);
img.copyTo(sharpened, lowContrastMask);

这是我的Java实现:

double sigma = 1, threshold = 5, amount = 1;
Mat source = Imgcodecs.imread(input.getName());
Mat destination = new Mat();
Imgproc.GaussianBlur(source, destination, new Size(), sigma, sigma);
Mat lowContrastMask = new Mat();
Core.absdiff(source, destination, lowContrastMask);
Imgproc.threshold(lowContrastMask, lowContrastMask, 0, threshold, Imgproc.THRESH_BINARY);
Mat sharpened = new Mat();
Core.multiply(source, new Scalar(0), sharpened, amount+1);
Mat sharpened2 = new Mat();
Core.multiply(destination, new Scalar(0), sharpened2, -amount);
Core.add(sharpened2, sharpened, sharpened);
source.copyTo(sharpened, lowContrastMask);

Alternative Unsharp Masking方法:

Mat source = Imgcodecs.imread(input.getName());
Mat destination = new Mat();
Imgproc.GaussianBlur(source, destination, new Size(0,0), 60);
Core.addWeighted(source, 1.5, destination, -1, 0, destination);

所以,这两种方法都有效,但结果并不像gimp那样好。我对任何建议持开放态度。我知道它看起来像一个糟糕的实现。我是新手,感谢您的帮助。

0 个答案:

没有答案