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でまったく同じパラメータを試してみると、はるかに良い結果が得られます。私自身のコードはノイズの多い画像につながります。私は何を間違っているのですか。
2番目の質問は、RGB画像にアンシャープマスキングを適用するにはどうすればよいですか?3つのチャネルのそれぞれをアンシャープマスクする必要がありますか、それとも別の色空間でより適切ですか?これらのことはPhotoshopでどのように行われますか?
ご協力いただきありがとうございます!