我正在尝试用OpenCV和函数fastNlMeansDenoisingColored去噪彩色图像。这对于大图像来说,去噪的时间太长了,用OpenCV在c++中去除图像噪声的任何替代算法都要花费太多的时间,并举例说明。
发布于 2022-10-21 10:15:49
我使用了Nvidia的Optix去噪器,它在不到1秒的时间内给了我一个去噪图像,除非你想要实时的东西,你可以试试。他们说,它基于人工智能,而且它也使用你的GPU与库达库,所以这是安全的说,相当快和几乎实时去噪。
发布于 2022-10-21 14:39:59
下面的代码是一个使用高斯模糊和中值模糊去噪图像的例子。您可以使用此代码使用图像测试去噪algs,并选择最佳的时间/质量参数。计算去噪图像的时间,花费在几秒钟内输出到控制台。
我的平均次数是: GaussianBlur 0.0747621 medianBlur 0.0100638 NlMeans 1.07519
使用键'1','2','3','4‘分别观看原始,NlMeans,中值或高斯粉砂。“q”结束节目。我发现通过简单的切换图像来比较去噪效果是很方便的,同时保持逐像素的对应。您可以更改int k_sz和double gauss_sigma值以更改模糊程度。
#include <opencv2/opencv.hpp>
#include <chrono>
#include <string>
using namespace std;
using namespace cv;
int main()
{
Mat frame;
frame = imread("E:\\images\\pair_noised.jpg");
while (1)
{
Mat gaus;
Mat median;
Mat NlMeans;
int k_sz = 5;
double gauss_sigma = 1.6;
try {
TickMeter tm;
tm.start();
GaussianBlur(frame, gaus, Size(k_sz, k_sz), gauss_sigma);
tm.stop();
cout << "GaussianBlur " <<tm.getTimeSec() << endl;
tm.reset();
tm.start();
medianBlur(frame, median, k_sz);
tm.stop();
cout << "medianBlur " << tm.getTimeSec() << endl;
tm.reset();
tm.start();
fastNlMeansDenoisingColored(frame, NlMeans);
tm.stop();
cout << "NlMeans " << tm.getTimeSec() << endl;
tm.reset();
}
catch(Exception& Ex)
{
cout << Ex.what() << endl;
}
string win_nm = "output";
namedWindow(win_nm);
char key = waitKey();
switch (key)
{
case '4':
imshow(win_nm, gaus);
break;
case '3':
imshow(win_nm, median);
break;
case '2':
imshow(win_nm, NlMeans);
break;
case '1':
imshow(win_nm, frame);
break;
case 'q':
return 0;
default:
imshow(win_nm, frame);
break;
}
}
return 0;
}https://stackoverflow.com/questions/73236343
复制相似问题