使用OPENCV提高图像量表并最大化分辨率

Increasing image scale and maximizing resolution using opencv?

本文关键字:最大化 分辨率 图像 OPENCV 高图像 使用      更新时间:2023-10-16

我刚刚开始研究opencv,我查看了一些类似的问题,但我没有发现答案有帮助。我有许多图像,像素尺寸为50宽和50个heigh(拇指指甲尺寸)。

我对以下内容有些困惑:

q。通过增加这些图像的规模,我是否会自动增加分辨率?还是我需要执行其他功能?

至关重要的是,我可以在增加图像规模的同时获得最大分辨率。

我正在使用以下功能:

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;
}

如这里的人们先前所述,在增加图像大小时,使用插值非常有限。您正在使用以前的分辨率中的像素来猜测他们增加图像的分辨率时其值是什么。尽管图像将是更高的分辨率,但质量不会更好。

已经提出了一种克服这一点的技术是超级分辨率的想法。这样做的想法是,当您查看场景时,您会拍摄几个不同的图像,以查看不同的观点。每个图像在其他图像以前从未见过的信息上都有一些微小的差异。您确定每个观点的独特之处,然后将这些信息结合在一起,以使质量更好的图像流。不幸的是,这与单个图像无效,因为没有其他信息可以从图像流中提取。您可以使用同一观点的多个图像。在摄像机传感器上引入的噪声轮廓应足以为超级分辨率算法提供不同的信息,以便产生更高质量的高尺度图像。实际上,超级分辨率的想法是拍摄几张具有"低质量"的图像,并通过将其信息组合到最终图像中来创建高质量的结果。这个想法已经存在了一段时间,不仅与图像处理有关,而且在科学中的显微镜和成像领域有关。

仅使用一个图像进入人为创建超级分辨率图像的区域,这些图像可能会根据图像而起作用,也可能不起作用。拥有图像流将具有更高的成功概率。您可以在此处阅读有关超级分辨率的更多详细信息:http://www.infognition.com/articles/what_is_is_super_resolution.html

幸运的是,OPENCV确实具有实现超级分辨率的模块,并且可以在超级分辨率模块中找到。您 do 需要以一系列图像为食,输出将是一系列图像,在所需的更高分辨率下具有更高质量。

可以在OpenCV的GitHub repo上找到有关如何使用超级分辨率模块的代码示例:https://github.com/opencv/opencv/blob/master/master/master/samples/gpu/super_resolution.cpp。不要愚弄来源的位置。即使将其放置在GPU示例下,该代码旨在处理if语句中的CPU和GPU案例。该代码只需采用视频供稿,并具有所需的分辨率,它将输出基于超分辨率的结果。

是的,此代码有效地执行了4.1x"数字缩放",因此输出图像应具有分辨率205 x 205或类似的分辨率。当未指定的左图时,调整大小会使用双线性插值来提高采样。结果将具有更高的分辨率,但不会比原始的低分辨率图像更明显。