该算法的名称是什么?它与其他图像重采样算法相比如何?

2024-03-20

这个算法已经在我脑海中存在了很长一段时间,但我找不到任何地方描述它。虽然它是如此简单,但我不可能是唯一一个想到它的人。它的工作原理如下:

你从一张图片开始。比如说,7x7px:

您需要将其重新采样,例如 5x5px:

所以你要做的就是取每个新方块的平均颜色:

这不是最近邻,因为它只采用一个像素的颜色,而不是碰巧覆盖源像素的分数像素的颜色。它也不是双线性、双三次、lanczos 或其他任何插值。

那么——这是什么?在我看来,直觉上这应该是“数学上完美”的重采样算法,尽管由于我没有“数学上完美”的定义,所以我无法证明或反驳这一点。

最后但并非最不重要的一点是,“数学上完美”并不总是“最好看”,所以我想知道它与其他主流图像重采样算法(双三次、lanczos)在“质量”方面相比如何?当然,这是一个主观术语,所以我真的很感兴趣这个算法和其他算法之间是否存在显着差异,大多数人都会同意这一点。

附:我已经可以告诉你一些事情 - 对于像素艺术来说,它不会是“最好看的”,如此处所示;有专门的算法(2xSAI 等);而且它对于放大图片来说也不是最好的——插值法会胜出。但是对于缩小图片...?

更新1:嗯,刚刚知道超采样 http://en.wikipedia.org/wiki/Supersampling。这似乎是它的一个变体,具有网格类型的样本排列,其中样本数量针对源图像和目标图像的分辨率进行了优化。


首先我要说的是我不知道你的算法的正式名称。我知道Paint Shop Pro很早就将其称为“双线性”,但在版本8中由于指出该算法与双线性的经典定义不符而被迫将其重命名为“加权平均”。

大多数调整大小算法可以在两个独立的通道中应用,一个在 X 方向,一个在 Y 方向。这不仅更高效,而且使描述和推理不同算法变得更加容易。从现在开始,我将在一维中工作,并假设您可以推断到二维。

您的输入由 7 个像素组成,我们将给出坐标 0、1、2、3、4、5、6。认识到这一点很有用像素不是一个小正方形 http://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15869-f11/www/readings/smith95_pixelsquare.pdf在这种情况下,但这只是一个点。要创建输出,您需要来自点 0.2、1.6、3.0、4.4、5.8 的插值。为什么不是 0.0、1.5、3.0、4.5、6.0?假设您将输入和输出的大小加倍为 14x14 和 10x10:坐标现在为 0.0、1.44、2.89、4.33、5.78、7.22、8.67、10.11、11.56、13.0。从第二个像素开始,结果会有所不同,这是不可接受的。所有点的间距应为 7/5,坐标为 0.2、1.6、3.0、4.4、5.8、7.2、8.6、10.0、11.4、12.8。

让我们比较一下用过滤器表示的常见调整大小算法,看看它们与您的算法有何不同。

通用形式的第一个示例称为框或平均滤波器。但是,当盒式过滤器的宽度恰好为 1.0 时,就会发生神奇的事情:输入中的一个像素将落入盒内并被赋予权重 1.0,而输入中的所有其他像素将被赋予权重 0.0 。这使得它相当于最近邻算法。

我们的第二个示例通常称为帐篷过滤器。当宽度恰好为 2.0 时,它又变得很特别,它变成了线性插值;应用在 2D 中,称为双线性。

第三个示例是三次过滤器,当应用于 2D 时称为双三次过滤器。该公式有不同的变体,本示例使用 Mitchell 和 Netravali 建议的公式。

虽然高斯滤波器不常用于调整大小的应用程序,但我将其添加到此处进行比较。

最后我们达到了你的算法。它是平均和双线性的结合,是一个平顶的帐篷。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

该算法的名称是什么?它与其他图像重采样算法相比如何? 的相关文章

  • 零填充缓冲区/文件的 CRC32 计算

    如果我想计算大量连续零字节的 CRC32 值 在给定零运行长度的情况下 是否可以使用恒定时间公式 例如 如果我知道我有 1000 个字节全部用零填充 有没有办法避免 1000 次迭代的循环 只是一个例子 对于这个问题 实际的零数量是无限的
  • Linux 上的 Imagemagick 将 EMF 转换为 PNG

    我尝试在 Red Hat Enterprise Linux Server 5 5 Tikanga 上使用 Imagemagick 将 EMF 格式的图像转换为 PNG 但遇到以下错误 转换 此图像格式 thumbnail emf 没有解码委
  • 我怎样才能找到圆的所有点? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 给定半径和圆心坐标 如何找到圆的所有
  • bash 调整图像尺寸以适合特定大小

    我到处搜索但找不到这个问题的答案 我想精确输出一个文件夹中的所有图像 大小为 50Kb 并保持原始的宽高比 I tried ImageMagick并将大小调整为 250x250 例如 但它对我不起作用 它所做的是更改第一个尺寸并适应另一个尺
  • 使用回溯(而不是 DFS)背后的直觉

    我正在解决单词搜索 https leetcode com problems word search description LeetCode com 上的问题 给定一个 2D 板和一个单词 查找该单词是否存在于网格中 该单词可以由顺序相邻单
  • 收据褪色部分可以恢复吗?

    我有一些包含一些扫描收据的文件 我需要使用 OCR 从中提取文本 由于收据上打印的文字在一段时间后会褪色 导致收据上的某些文字不清晰 影响OCR结果 褪色单词的一些示例 有什么方法可以恢复褪色的部分 以便提高 OCR 结果吗 我在OpenC
  • 生成非连续组合

    我正在尝试创建一个生成器 支持执行 next 的迭代器 可能在 python 中使用yield 它给出来自 1 2 n n 和 r 是参数 的 r 元素的所有组合 这样在选出的r个元素 没有两个是连续的 例如 对于 r 2 且 n 4 生成
  • 找到两个移动物体的更好交点

    我想极大地优化我的算法之一 我将尽力以最好的方式解释它 主题 我们当时处于二维欧几里德系统中t 0 在这个系统中有两个对象 O1 and O2 O1 and O2分别位于点PA and PC O1移动于常数和已知点方向的速度PB 当物体到达
  • 在二维平面中找到距离 P 点最近的 K 个点

    资料来源 亚马逊面试问题 解决方案1制作大小为 K 的堆并按最小距离收集点O NLogK 复杂 解决方案2 取大小为 N 的数组并按距离排序 应该使用QuickSort 霍尔修改 取前 K 点作为答案 这太复杂了 NlogN 但可以优化到近
  • 修改排列算法以防止重复打印输出的策略

    我一直在审查实践算法 目前正在研究一种我非常喜欢的排列算法 void permute char set int begin int end int range end begin if range 1 cout lt lt set lt l
  • 如何对数组进行排序(索引)以使用这些索引将原始数组从最小到最大值排序

    例如我有这个数组 int a 6 10 16 11 7 12 3 9 8 5 我想像这样对其索引进行排序 6 9 0 4 8 7 1 3 5 2 所以我可以使用索引将 a 从最小到最大值排序 在我的代码中我得到了这个 6 9 4 8 7 4
  • 给定两个(大)点集,我如何有效地找到彼此最接近的点对?

    我需要解决一个计算问题 该问题归结为搜索两个集合之间最接近的点对 问题是这样的 给定欧几里德空间中的一组点 A 和一组点 B 找到所有对 a b 使得 b 是 B 中与 a 最近的点 a 是 A 中与 b 最近的点 集合 A 和 B 的大小
  • 当目标是查找某个字符串的所有出现情况时,KMP 最坏情况的复杂度是多少?

    我还想知道哪种算法在查找另一个字符串中所有出现的字符串时具有最坏情况的复杂性 博耶 摩尔算法似乎具有线性时间复杂度 KMP 算法在查找字符串中所有出现的模式时具有线性复杂度 如 Boyer Moore 算法1 如果您尝试在 aaaaaaaa
  • 4 x 3 锁图案

    我遇到了这个 它要求计算在 4x3 网格中可以制作特定长度的锁定图案的方式数 并遵循规则 可能有些点不能包含在路径中 有效的模式具有以下属性 图案可以使用第一次接触的点序列来表示 与绘制图案的顺序相同 从 1 1 到 2 2 的图案与图案不
  • 如何使用KDTrees实现最近邻搜索?

    所以 我正在实施一个KD Tree http en wikipedia org wiki Kd tree进行最近邻搜索 我已经构建了树部分 但我认为我没有完全理解搜索部分 关于遍历树来搜索邻居 维基百科文章如下 Starting with
  • Bellman-Ford 算法检测什么?负重还是负循环?

    如果给定一个图 现在我们要从源头计算最短路径 现在 如果一条边具有负权重 但在到达目的地时有边到后边返回到该边 我的意思是如果没有循环 那么我们就没有负循环 但是here http en wikipedia org wiki Bellman
  • OpenCV的拼接模块可以拼接平行运动相机拍摄的图像吗?

    我想知道是否缝合 http docs opencv org modules stitching doc stitching html http docs opencv org modules stitching doc stitching
  • 如何动态查找连接组件

    使用不相交集数据结构可以很容易地得到图的连通分量 而且 它只是支持增量连接组件 http www boost org doc libs 1 46 1 libs graph doc incremental components html 然而
  • 对图像使用 Pixellib 自定义训练时出现 input_image 元形状错误

    我正在使用 Pixellib 来训练自定义图像实例分割 我创建了一个数据集 可以在下面的链接中看到 数据集 https drive google com drive folders 1MjpDNZtzGRNxEtCDcTmrjUuB1ics
  • 合并字符数组中的最小重复次数

    假设我有两个数组 我想合并它们 以便合并后的数组具有最小重复次数 例如 x x 是重复 arr1 x d d m f m arr2 d d x f f m 唯一的条件是在合并数组中 元素来自arr1 and arr2必须出现在各自的订单中a

随机推荐

  • 使用 LINQ2SQL 插入新的子级+父级

    与 LINQ2SQL 作斗争 我是新手 到目前为止一切都还好 但这个问题确实让我悲伤 我有两个对象 父对象和子对象 定义如下 Table Name Parent public class Parent Column IsPrimaryKey
  • 关闭时似乎有 6 个泄漏的信号量对象需要清理 warnings.warn('resource_tracker: 似乎有 %d

    我正在尝试通过 python 3 8 在我的 Firebase 实时数据库上进行测试连接 我有两个脚本 一个是wdata 写入数据 另一个是rdata 读取数据 wdata py 是 from firebase import firebas
  • shell 脚本删除文件(如果已存在)

    我正在研究一些将数据存储在文件中的东西 但每次我运行脚本时 它都会附加到前一个文件中 我需要有关如何删除该文件 如果该文件已存在 的帮助 不必费心检查该文件是否存在 只需尝试将其删除即可 rm f p a t h or rm p a t h
  • Python:获取字符串的大小(以字节为单位)

    我有一个要通过网络发送的字符串 我需要检查它所表示的总字节数 sys getsizeof string name 返回额外的字节 例如对于sys getsizeof a 返回 22 而在 python 中 一个字符仅用 1 个字节表示 还有
  • Java 应用程序不显示输出

    这是我更新的代码 package car1 公共类主要 公共静态无效主 字符串 args HondaCivic 类实现 car1 int speed 0 int rpm 0 int gear 1 public void speedUp in
  • 如何使用 Jersey REST 处理服务不可用的情况

    我有一个与 Spring 集成的球衣 RESTful 服务 web xml 中映射的基本 url 是 rest 我的服务等级如下 Resource Scope request Path service Component public cl
  • 如何在角度材料2中选择默认项目选择多个

    我正在开发 Angular 2 Material 应用程序 我有一个情况 其中存在多选元素 并且我有一个带有复选框的列表 因此我可以一次选择多个项目 我可以使用角度材质组件来实现这一点 但我想要的是默认检查 2 3 个项目 如果我选择 取消
  • Laravel 5 在测试之间重新播种数据库以进行单元测试

    我从一个种子数据库开始 并尝试在 Laravel 5 的单元测试之间重新种子数据库 在 Laravel 4 中 我知道您可以简单地使用 Illuminate Support Facades Artisan 并运行命令 Artisan cal
  • 为什么java.nio.files.Path中没有Path构造函数?

    Path 类没有记录的构造函数 但可以通过以下方式创建实例 Paths get 这是FileSystems getDefault getPath 那么有人可以解释这个设计决策吗 有人可以解释这个设计决定吗 这是因为 JSR 203 允许从多
  • ManageUserViewModel 类在哪里?

    我使用 ASP Net MVC 5 EF 6 和 Net 4 5 1 创建了一个项目 在某些时候 我需要更改项目所在的命名空间 从 MyTestProject 更改为 MyRealProject 在整个网站上进行这些更改后 我现在在一些视图
  • 避免贫血域模型 - 一个真实的例子

    我试图理解贫血领域模型以及为什么它们被认为是反模式 这是一个现实世界的例子 我有一个 Employee 类 它有大量的属性 姓名 性别 用户名等 public class Employee public string Name get se
  • WCF 与 Java 兼容吗?

    哪些 WCF 服务协议与 Java 配合得很好 TCP 服务绑定是否可与 java 远程处理 Corba EJB JMS 等 配合使用 作为服务端点公开的 Web 服务又如何呢 这些是否已经针对通用 Java WebServices 堆栈进
  • 如何为特定目录设置open_basedir

    我有一个目录 htdocs unsecured我想限制该目录或其子目录中的任何内容访问该目录之外的任何内容 在哪里以及如何设置open basedir仅适用于此目录 您可以设置open basedir在您的 Apache 配置文件 php
  • 将 git lfs ls-files 与 git ls-files ':(attr:filter=lfs)' 进行比较是否是检测不受 lfs 管理的 lfs 文件的可靠方法?

    我尝试找到一种方法来确定 git 存储库中的文件是否由 git lfs 正确管理 到目前为止 我发现比较结果git lfs ls files and git ls files attr filter lfs 似乎给了我我想要的 Add Ty
  • Ruby 相当于“grep -C 5”来获取匹配周围行的上下文?

    我对此进行了一些搜索 但我一定使用了错误的术语 ruby 是否有办法 grep 查找字符串 正则表达式并返回周围的 5 行 上面和下面 我知道我可以打电话 grep C 5 或者甚至编写我自己的方法 但这似乎是 ruby 拥有的东西 而我只
  • Mac 上的 auctex 和 emacs

    我想要的是能够成功使用 emacs 和 auctex 一些系统信息 ProductName Mac OS X ProductVersion 10 8 5 BuildVersion 12F45 Emacs Version 24 3 9 0 A
  • 如何在 iPad 版 Objective C 中解析 PDF

    我一直在解析 PDF 文件 请指导我如何做到这一点 头文件 PDFViewer h interface PDFViewer UIView CGPDFDocumentRef pdf void drawInContext CGContextRe
  • 如何通过 XSLT 在 Java 中合并 2 个 XML 流

    我想在 Java 中合并 2 个 XML 流 字符串 必须通过 XSLT 我可以更改转换 但问题是 XML 作为字符串出现 有很多例子 但是通过文件 可以在不将它们保存在文件中的情况下完成此操作吗 Thanks 我只知道一种使用自己的实现的
  • c++ max_element 每n个元素

    有没有办法比较每 N 个元素来找到容器中的最大元素并返回索引 使用 STL BOOST 或 其他库 对于每个 N 我的意思是使用 std max element 但将 for 的增加从 first 更改为 first n based on
  • 该算法的名称是什么?它与其他图像重采样算法相比如何?

    这个算法已经在我脑海中存在了很长一段时间 但我找不到任何地方描述它 虽然它是如此简单 但我不可能是唯一一个想到它的人 它的工作原理如下 你从一张图片开始 比如说 7x7px 您需要将其重新采样 例如 5x5px 所以你要做的就是取每个新方块