OpenCV (C++) - 彩色图像的白化变换
OpenCV (C++) - whitenning transformation on a color image
是否有内置函数可以对具有 3 个通道的 cv::Mat
应用白化变换?
我希望图像具有 零均值 和 单位方差 。
最接近您想要的(据我所知)的选项是使用 cv::meanStdDev
(它可以处理多通道图像),然后手动减去平均值并除以每个通道的方差。
cv::Mat Whiten(cv::Mat image)
{
image.convertTo(image, CV_32F);
cv::Mat mu, sigma;
cv::meanStdDev(image, mu, sigma);
std::vector<cv::Mat> channels;
cv::split(image, channels);
for (int i = 0; i < channels.size(); ++i)
channels[i] = (channels[i] - mu.at<double>(i, 0)) / sigma.at<double>(i, 0);
cv::merge(channels, image);
return image;
}
是否有内置函数可以对具有 3 个通道的 cv::Mat
应用白化变换?
我希望图像具有 零均值 和 单位方差 。
最接近您想要的(据我所知)的选项是使用 cv::meanStdDev
(它可以处理多通道图像),然后手动减去平均值并除以每个通道的方差。
cv::Mat Whiten(cv::Mat image)
{
image.convertTo(image, CV_32F);
cv::Mat mu, sigma;
cv::meanStdDev(image, mu, sigma);
std::vector<cv::Mat> channels;
cv::split(image, channels);
for (int i = 0; i < channels.size(); ++i)
channels[i] = (channels[i] - mu.at<double>(i, 0)) / sigma.at<double>(i, 0);
cv::merge(channels, image);
return image;
}