aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Parfenov <a1994ndrey@gmail.com>2017-11-04 15:19:53 +0300
committerwindyuan <feng.yuan@intel.com>2017-11-22 17:49:50 +0800
commit2997bc86bde5b3bde05355ecd86dcc56128e15d1 (patch)
treed325572958e30276cd0c86f1d7dcc2d5decc6852
parente00f4403fe5cc0584097ea1c35249d42570d02f9 (diff)
downloadlibxcam-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.cpp18
-rw-r--r--modules/ocl/cv_image_deblurring.h4
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);