【发布时间】:2012-10-29 02:21:37
【问题描述】:
我正在尝试像在 Adobe Photoshop 中那样实现非锐化蒙版。我在互联网上收集了很多信息,但我不确定我是否遗漏了什么。代码如下:
void unsharpMask( cv::Mat* img, double amount, double radius, double threshold ) {
// create blurred img
cv::Mat img32F, imgBlur32F, imgHighContrast32F, imgDiff32F, unsharpMas32F, colDelta32F, compRes, compRes32F, prod;
double r = 1.5;
img->convertTo( img32F, CV_32F );
cv::GaussianBlur( img32F, imgBlur32F, cv::Size(0,0), radius );
cv::subtract( img32F, imgBlur32F, unsharpMas32F );
// increase contrast( original, amount percent )
imgHighContrast32F = img32F * amount / 100.0f;
cv::subtract( imgHighContrast32F, img32F, imgDiff32F );
unsharpMas32F /= 255.0f;
cv::multiply( unsharpMas32F, imgDiff32F, colDelta32F );
cv::compare( cv::abs( colDelta32F ), threshold, compRes, cv::CMP_GT );
compRes.convertTo( compRes32F, CV_32F );
cv::multiply( compRes32F, colDelta32F, prod );
cv::add( img32F, prod, img32F );
img32F.convertTo( *img, CV_8U );
}
目前我正在使用灰度图像进行测试。如果我在 Photoshop 中尝试完全相同的参数,我会得到更好的结果。我自己的代码会导致图像嘈杂。我做错了什么。
第二个问题是,如何在 RGB 图像上应用非锐化遮罩?我是否必须对 3 个通道中的每一个通道进行锐化遮罩,还是在另一个颜色空间中会更好?这些事情是如何在 Photoshop 中完成的?
感谢您的帮助!
【问题讨论】:
标签: c++ opencv image-processing reverse-engineering photoshop