diff --git a/lib/libstereo/middlebury/middlebury.cpp b/lib/libstereo/middlebury/middlebury.cpp
index a54b4f153ae4cf0813d588626d4c7c71cff9500f..e3136325f1275ba1c1de9983ebeb24b223f71ba8 100644
--- a/lib/libstereo/middlebury/middlebury.cpp
+++ b/lib/libstereo/middlebury/middlebury.cpp
@@ -169,3 +169,13 @@ MiddEvalResult evaluate(const cv::Mat &disp, const cv::Mat &gt, const cv::Mat &m
 	result.rms_bad_nonoccl = sqrt(err2_bad/n);
 	return result;
 }
+
+void add_noise(cv::Mat &im, double stddev, double mean) {
+	cv::Mat noise = cv::Mat(im.size(),CV_64FC3);
+	cv::randn(noise, mean, stddev);
+
+	cv::Mat tmp;
+	im.convertTo(tmp, CV_64FC3, 1.0/255.0);
+	tmp += noise;
+	cv::normalize(tmp, im, 0, 255, cv::NORM_MINMAX, CV_8UC3);
+}
diff --git a/lib/libstereo/middlebury/middlebury.hpp b/lib/libstereo/middlebury/middlebury.hpp
index e2c18e02b736db79a3ed48e4a6f4fdded67764d0..87d9af5d307bb10782a8723cdb728841982c0ab7 100644
--- a/lib/libstereo/middlebury/middlebury.hpp
+++ b/lib/libstereo/middlebury/middlebury.hpp
@@ -32,3 +32,12 @@ MiddEvalCalib read_calibration(const std::string &filename);
 MiddEvalResult evaluate(const cv::Mat &disp, const cv::Mat &gt, const cv::Mat &mask, float threshold=1.0f);
 
 cv::Mat read_pfm(const std::string &filename);
+
+/**
+ * Add gaussian noise to image.
+ *
+ * @param	im		CV_8UC3
+ * @param	stddev	standar deviation
+ * @param	mean	mean for noise
+ */
+void add_noise(cv::Mat &im, double stddev, double mean=0.0);