diff options
author | Andrey Parfenov <a1994ndrey@gmail.com> | 2017-11-04 15:19:53 +0300 |
---|---|---|
committer | windyuan <feng.yuan@intel.com> | 2017-11-22 17:49:50 +0800 |
commit | 2997bc86bde5b3bde05355ecd86dcc56128e15d1 (patch) | |
tree | d325572958e30276cd0c86f1d7dcc2d5decc6852 | |
parent | e00f4403fe5cc0584097ea1c35249d42570d02f9 (diff) | |
download | libxcam-2997bc86bde5b3bde05355ecd86dcc56128e15d1.tar.gz |
cv-image-deblurring: add the opportunity to specify psf size and noise power manually
Signed-off-by: Andrey Parfenov <a1994ndrey@gmail.com>
-rw-r--r-- | modules/ocl/cv_image_deblurring.cpp | 18 | ||||
-rw-r--r-- | modules/ocl/cv_image_deblurring.h | 4 |
2 files changed, 13 insertions, 9 deletions
diff --git a/modules/ocl/cv_image_deblurring.cpp b/modules/ocl/cv_image_deblurring.cpp index 03b1232..c036b42 100644 --- a/modules/ocl/cv_image_deblurring.cpp +++ b/modules/ocl/cv_image_deblurring.cpp @@ -152,19 +152,23 @@ CVImageDeblurring::estimate_kernel_size (const cv::Mat &image) } void -CVImageDeblurring::blind_deblurring (const cv::Mat &blurred, cv::Mat &deblurred, cv::Mat &kernel) +CVImageDeblurring::blind_deblurring (const cv::Mat &blurred, cv::Mat &deblurred, cv::Mat &kernel, int kernel_size, float noise_power) { cv::Mat gray_blurred; cv::cvtColor (blurred, gray_blurred, CV_BGR2GRAY); - cv::Mat median_blurred; - medianBlur (gray_blurred, median_blurred, 3); - float noise_power = 1.0f / _helper->get_snr (gray_blurred, median_blurred); - XCAM_LOG_DEBUG("estimated inv snr %f", noise_power); + if (noise_power < 0) { + cv::Mat median_blurred; + medianBlur (gray_blurred, median_blurred, 3); + noise_power = 1.0f / _helper->get_snr (gray_blurred, median_blurred); + XCAM_LOG_DEBUG("estimated inv snr %f", noise_power); + } + if (kernel_size < 0) { + kernel_size = estimate_kernel_size (gray_blurred); + XCAM_LOG_DEBUG("estimated kernel size %d", kernel_size); + } std::vector<cv::Mat> blurred_rgb(3); cv::split(blurred, blurred_rgb); std::vector<cv::Mat> deblurred_rgb(3); - int kernel_size = estimate_kernel_size (gray_blurred); - XCAM_LOG_DEBUG("estimated kernel size %d", kernel_size); cv::Mat result_deblurred; cv::Mat result_kernel; blind_deblurring_one_channel (gray_blurred, result_kernel, kernel_size, noise_power); diff --git a/modules/ocl/cv_image_deblurring.h b/modules/ocl/cv_image_deblurring.h index 1e508f1..03348a4 100644 --- a/modules/ocl/cv_image_deblurring.h +++ b/modules/ocl/cv_image_deblurring.h @@ -62,10 +62,10 @@ public: void set_config (CVIDConfig config); CVIDConfig get_config (); - void blind_deblurring (const cv::Mat &blurred, cv::Mat &deblurred, cv::Mat &kernel); + void blind_deblurring (const cv::Mat &blurred, cv::Mat &deblurred, cv::Mat &kernel, int kernel_size = -1, float noise_power = -1.0f); private: - void blind_deblurring_one_channel (const cv::Mat &blurred, cv::Mat &kernel, int kernelSize, float noise_power); + void blind_deblurring_one_channel (const cv::Mat &blurred, cv::Mat &kernel, int kernel_size, float noise_power); int estimate_kernel_size (const cv::Mat &blurred); void crop_border (cv::Mat &image); |