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

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(使用前将#替换为@)

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

  • 检查有效的 IMEI

    有人知道如何检查有效的 IMEI 吗 我找到了一个可以检查此页面的功能 http www dotnetfunda com articles article597 imeivalidator in vbnet aspx http www do
  • 定点数学比浮点运算快吗?

    多年前 即 20 世纪 90 年代初期 我构建了图形软件包 该软件包基于定点算术和预先计算的 cos sin 表格以及使用牛顿近似方法进行 sqrt 和对数近似的缩放方程来优化计算 这些先进技术似乎已经成为图形和内置数学处理器的一部分 大约
  • 使用 PIL 用附近的颜色填充空白图像空间(也称为修复)

    我用 PIL 创建一个图像 我需要填充空白区域 显示为黑色 我可以轻松地用静态颜色填充它 但我想做的是用附近的颜色填充像素 例如 边框之后的第一个像素可能是填充像素的高斯模糊 或者可能是中描述的推拉型算法Lumigraph Gortler
  • 在任意时间范围内找到最佳日/月/年间隔的算法?

    如果您有时间表 请说 March 19 2009 July 15 2011 是否有一种算法可以将该时间范围分解为 March 19 2009 March 31 2009 complete days April 1 2009 December
  • 如何求两个地点的经纬度距离?

    我有一组位置的纬度和经度 怎么找distance从集合中的一个位置到另一个位置 有公式吗 半正矢公式假定地球是球形的 然而 地球的形状更为复杂 扁球体模型会给出更好的结果 如果需要这样的精度 你应该更好地使用文森特逆公式 See http
  • heapq.nlargest 的时间复杂度是多少?

    我在看演讲者说 获得t列表中最大的元素n元素可以在O t n 这怎么可能 我的理解是创建堆将是O n 但是复杂度是多少nlargest本身就是O n t or O t 实际的算法是什么 在这种情况下 说话者是错误的 实际成本是O n log
  • 为什么这个算法的Big-O复杂度是O(n^2)?

    我知道这个算法的大O复杂度是O n 2 但我不明白为什么 int sum 0 int i 1 j n n while i lt j sum 即使我们设定了j n n一开始 我们在每次迭代期间递增 i 并递减 j 因此最终的迭代次数不应该比n
  • 总和不小于 key 的数组的最小子集

    给定一个数组 假设为非负整数 我们需要找到最小长度子集 使得元素之和不小于 K K 是作为输入提供的另一个整数 是否有可能找到时间复杂度为 O n n 的大 oh 的解决方案 我目前的想法是这样的 我们可以在 O n log n 中对数组进
  • 求先递增后递减列表的最大值和最小值

    我尝试用谷歌搜索这个问题 但没有取得太大成功 我确信这个问题或类似问题有一个技术名称 但我似乎找不到答案 给定一个列表L整数 即严格递增 然后严格递减 找到该列表的最大值和最小值 例如 L可能 1 2 3 4 5 4 3 2 or 2 4
  • 贝尔曼福特算法可以有任意的边顺序吗?

    我刚刚开始学习新算法 但当我阅读 极客为极客而写的贝尔曼福特算法 时 我陷入了困境 http www geeksforgeeks org dynamic programming set 23 bellman ford algorithm h
  • MATLAB 中的霍夫变换

    有谁知道如何使用霍夫变换来检测二值图像中最强的线 A zeros 7 7 A 6 10 18 24 36 38 41 1 使用 rho theta 格式 其中 theta 以 45 为步长 从 45 到 90 以及如何在 MATLAB 中显
  • 图像处理 - 使用 opencv 进行服装分割

    我正在使用 opencv 进行服装特征识别 第一步 我需要通过从图像中移除脸部和手来分割 T 恤 任何建议表示赞赏 我建议采用以下方法 Use 阿德里安 罗斯布鲁克的用于检测皮肤的皮肤检测算法 谢谢罗莎 格隆奇以获得他的评论 在方差图上使用
  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • 连接红黑树

    OCaml 标准库有一个很棒的Set使用非常有效的分而治之算法来计算的实现union两套 我相信它会从一组中获取整个子树 而不仅仅是单个元素 并将它们插入到另一组中 并在必要时重新平衡 我想知道这是否需要 OCaml 使用的 AVL 树中保
  • 面试题:三个数组,O(N*N)

    假设我们有three长度数组N其中包含任意数量的类型long 然后我们得到一个数字M 相同类型 我们的任务是选择三个数字A B and C每个数组中的一个 换句话说A should从第一个数组中选取 B从第二个开始和C从第三个 所以总和A
  • 当满足动态条件时退出递归函数

    使用来自的函数生成汉明距离 t 内的所有比特序列 https stackoverflow com questions 40813022 generate all sequences of bits within hamming distan
  • 颜色变换器功能上的堆栈溢出错误

    我有两种颜色 红色 和 鲑鱼色 我需要动态创建面板以及面板背景颜色 这些颜色必须介于两种颜色之间 红色 public Color x y protected void Page Load object sender EventArgs e
  • 调度算法,找到设定长度的所有非重叠区间

    我需要为我的管理应用程序实现一种算法 该算法将告诉我何时可以将任务分配给哪个用户 我实现了一个蛮力解决方案 它似乎有效 但我想知道是否有更有效的方法来做到这一点 为了简单起见 我重写了算法以对数字列表进行操作 而不是数据库查询等 下面我将尝
  • Java 中旅行商问题的暴力算法

    我正在学校的数学课上做一个项目 我选择做旅行商问题 这是我一直想进行更多研究的问题 但是 我的暴力求解算法遇到了问题 请前往底部更新查看最新版本代码 如果您知道旅行推销员问题是什么 请跳过本段 尽可能概括地说 TSP 是这样的 您是一名推销
  • 从二叉堆中查找第 k 个最小元素的 O(klogk) 时间算法

    我们有一个 n 节点二叉堆 其中包含n不同的项目 根部的最小项目 为一个k lt n 发现O klogk 时间算法选择kth堆中的最小元素 O klogn 很明显 但无法找出O klogk 一 也许我们可以使用第二个堆 但不确定 好吧 你的

随机推荐

  • 使用 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 所以你要做的就是取每个新方块