使用opencv增加图像比例和最大化分辨率?

Bab*_*ham 4 c++ opencv resolution image image-processing

我刚刚开始研究 OpenCV,我看过一些类似的问题,但我没有找到有用的答案。我有许多像素尺寸为 50 宽和 50 高(拇指指甲大小)的图像。

我对以下内容有些困惑:

问:通过增加这些图像的比例,我是否会自动增加分辨率?还是我需要执行其他功能?

我必须在增加图像比例的同时获得尽可能大的分辨率。

我正在使用以下功能:

int IncreaseScale()
{
  char *image_name {"./image/my_image.jpg"};
  cv::Mat Image;
  Image = cv::imread(image_name, 1);
  if(!Image.data)
  {
    //Cant find image
    return 0;
  }
  const float rescale_value {4.10}; 
  cv::Mat Image2;
  cv::resize(Image, Image2, cvSize(0, 0), rescale_value, rescale_value);
  return 1;
}
Run Code Online (Sandbox Code Playgroud)

ray*_*ica 6

如前所述,这里的人们在增加图像大小时使用插值非常有限。当您增加图像的分辨率时,您正在使用先前分辨率的像素来猜测它们的值。虽然图像将具有更高的分辨率,但它的质量不会更好。

为克服这一问题而提出的一种技术是超分辨率的想法。这个想法是当你看一个场景时,你会从不同的视角拍摄几个不同的图像。每张图像都提供了其他图像以前从未见过的信息中的一些细微差别。您确定每个视点的独特之处,然后将这些信息组合在一起以制作质量更好的增强图像流。不幸的是,这不适用于单个图像,因为没有额外的信息可以从图像流中提取。你可以但是使用同一视点的多个图像。在相机传感器处引入的噪声配置文件应该足以为超分辨率算法提供不同的信息,以便生成更高质量的放大图像。事实上,超分辨率的想法是拍摄多张“低质量”的图像,并通过将它们的信息组合成最终图像来创建高质量的结果。这个想法已经存在了一段时间,不仅与图像处理有关,而且与科学中的显微镜和成像的各个领域有关。

仅使用单个图像就进入了人工创建超分辨率图像的领域,这取决于图像可能会也可能不会起作用。拥有图像流将有更高的成功概率。您可以在此处阅读有关超级分辨率的更多详细信息:http : //www.infognition.com/articles/what_is_super_resolution.html

幸运的是,OpenCV 确实有一个实现 Super Resolution 的模块,它可以在Super Resolution 模块中找到。您确实需要输入一系列图像,输出将是一系列质量更高、所需分辨率更高的图像。

关于如何使用 Super Resolution 模块的代码示例可以在 OpenCV 的 Github 存储库中找到:https : //github.com/opencv/opencv/blob/master/samples/gpu/super_resolution.cpp。不要被来源所在的位置所愚弄。尽管它位于 GPU 示例下,但代码旨在处理 CPU 和 GPU 情况,如您在if语句中所见。该代码仅接收视频源并以所需的分辨率输出基于超分辨率的结果。