双线性插值

2024-02-28

我得到了通过双线性插值缩放图像的代码。我知道这是可行的,但我无法弄清楚如果近似像素值是边缘(边缘我的意思是它在最后一行或最后一列)像素中的一件事会怎样输入图像然后我可以 gt 坐标 (x+1,y+1) 的像素,这应该会导致数组索引超出范围错误,但没有发生这样的错误,为什么? 代码是:

public int[] resizeBilinearGray(int[] pixels, int w, int h, int w2, int h2) {
    int[] temp = new int[w2*h2] ;
    int A, B, C, D, x, y, index, gray ;
    float x_ratio = ((float)(w-1))/w2 ;
    float y_ratio = ((float)(h-1))/h2 ;
    float x_diff, y_diff, ya, yb ;
    int offset = 0 ;
    for (int i=0;i<h2;i++) {
        for (int j=0;j<w2;j++) {
            x = (int)(x_ratio * j) ;
            y = (int)(y_ratio * i) ;
            x_diff = (x_ratio * j) - x ;
            y_diff = (y_ratio * i) - y ;
            index = y*w+x ;

            // range is 0 to 255 thus bitwise AND with 0xff
            A = pixels[index] & 0xff ;
            B = pixels[index+1] & 0xff ;
            C = pixels[index+w] & 0xff ;
            D = pixels[index+w+1] & 0xff ;

            // Y = A(1-w)(1-h) + B(w)(1-h) + C(h)(1-w) + Dwh
            gray = (int)(
                    A*(1-x_diff)*(1-y_diff) +  B*(x_diff)*(1-y_diff) +
                    C*(y_diff)*(1-x_diff)   +  D*(x_diff*y_diff)
                    ) ;

            temp[offset++] = gray ;                                   
        }
    }
    return temp ;
}

原因是x_ratio and y_ratio计算不正确。

考虑最后一行的最后一个像素:

i=h2, j=w2 

then:

x = x_ratio * j = (w-1)/w2 * (w2-1) = (w-1) * (w2-1)/w2 <= w-1
y = y_ratio * i = (h-1)/h2 * (h2-1) = (h-1) * (h2-1)/h2 <= h-1

index = y*w+x <= (h-1)*w + (w-1) < w*h

所以索引总是小于pixels array.


但请注意,这是一个非常肮脏的黑客行为,这将导致结果不准确,尤其是对于小图像。

您应该按如下方式计算宽度/高度比:

float x_ratio = ((float)w)/w2;
float y_ratio = ((float)h)/h2;

并创建一个将坐标转换为数组索引的函数 - 让我们命名它coord2index。该函数考虑了超出范围的坐标并实现了所谓的边界选项, which 模拟图像边界之外有像素。

边界的常见选项有:

  • 对称的- 图像边界之外的像素通过在边界处镜面反射图像来计算。在这种情况下,这可能是最好的可能性。

  • 复制- 假设图像边界之外的像素等于边界处最近的像素。这是最简单的方法。

  • circular- 图像实际上在所有方向上周期性地重复。用于一些高级图像处理算法;不利于图像调整大小。

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

双线性插值 的相关文章

  • JPA 中的复合键

    我想创建一个具有自动生成的主键的实体 而且还有一个由其他两个字段组成的唯一复合键 我如何在 JPA 中执行此操作 我想这样做是因为主键应该用作另一个表中的外键 并且使其复合并不好 在下面的代码片段中 我需要命令和模型是唯一的 pk当然是主键
  • createImage(int width, int height) 的问题

    我有以下代码 作为游戏的一部分每 10 毫秒运行一次 private void gameRender if dbImage null createImage returns null if GraphicsEnvironment isHea
  • Spring Security 自定义过滤器

    我想自定义 Spring security 3 0 5 并将登录 URL 更改为 login 而不是 j spring security check 我需要做的是允许登录 目录并保护 admin report html 页面 首先 我使用教
  • 如何在 Firebase 远程配置中从 JSON 获取值

    我是 Android 应用开发和 Firebase 的新手 我想知道如何获取存储在 Firebase 远程配置中的 JSONArray 文件中的值 String 和 Int 我使用 Firebase Remote Config 的最终目标是
  • 如何在 Antlr4 中为零参数函数编写语法

    我的函数具有参数语法 如下面的词法分析器和解析器 MyFunctionsLexer g4 lexer grammar MyFunctionsLexer FUNCTION FUNCTION NAME A Za z0 9 DOT COMMA L
  • GWT - 如何组织项目以拥有多个网页以及它们之间的导航

    我是 GET 的新手 顺便说一句 它给我留下了深刻的印象 并且发现它对于像我这样熟悉 C NET 桌面技术并愿意编写 Web 应用程序的人来说非常有吸引力 我根据 GWT Eclipse 向导生成的示例启动了自己的项目 该项目生成带有面板的
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • 如何根据运行的 jar 的结果让我的 ant 任务通过或失败?

    我正在运行 CrossCheck 无浏览器 js 单元测试 作为 ant 脚本的一部分 如果 CrossCheck 测试失败 我希望 ant 报告失败 这是 build xml 中的相关部分
  • 如何检测 Java 字符串中的 unicode 字符?

    假设我有一个包含 的字符串 我如何找到所有这些 un icode 字符 我应该测试他们的代码吗 我该怎么做呢 例如 给定字符串 A X 我想将其转换为 AYXY 我想对其他 unicode 字符做同样的事情 并且我不想将它们存储在某种翻译映
  • Java Swing For mac 中的 DJ Native Swing 浏览器

    我有一个用 Swing 制作的 Java 应用程序 并且使用了一个 DJ Native Swing 浏览器 当我尝试在 OS X 上使用它时 它抛出了一个NoClassDefFoundError尽管我添加了 swt jar 但始终如此 有人
  • 读取电子邮件的文本文件转换为 Javamail MimeMessage

    我有一个电子邮件原始来源的文本文件 直接从 gmail 复制 如果您单击 查看原始文件 您就会看到它 我想读入该文件并将其转换为 MimeMessage 如果您好奇为什么 我设置了 JavaMaildir 并且需要用电子邮件填充它的收件箱以
  • 使用架构注册表对 avro 消息进行 Spring 云合约测试

    我正在查看 spring 文档和 spring github 我可以看到一些非常基本的内容examples https github com spring cloud samples spring cloud contract sample
  • 在 SWT/JFace RCP 应用程序中填充巨大的表

    您将如何在 SWT 表中显示大量行 巨大是指超过 20K 行 20 列的东西 不要问我为什么需要展示那么多数据 这不是重点 关键是如何让它尽可能快地工作 这样最终用户就不会厌倦等待 每行显示某个对象的实例 列是其属性 一些 我想使用 JFa
  • QuerySyntaxException:无法找到类

    我正在使用 hql 生成 JunctionManagementListDto 类的实际 Java 对象 但我最终在控制台上出现以下异常 org hibernate hql internal ast QuerySyntaxException
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • Android:无法发送http post

    我一直在绞尽脑汁试图弄清楚如何在 Android 中发送 post 方法 这就是我的代码的样子 public class HomeActivity extends Activity implements OnClickListener pr
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • Java中HashMap和ArrayList的区别?

    在爪哇 ArrayList and HashMap被用作集合 但我不明白我们应该在哪些情况下使用ArrayList以及使用时间HashMap 他们两者之间的主要区别是什么 您具体询问的是 ArrayList 和 HashMap 但我认为要完
  • 如何使用play框架上传多个文件?

    我在用play framework 2 1 2 使用java我正在创建视图来上传多个文件 我的代码在这里 form action routes upload up enctype gt multipart form data

随机推荐

  • 在 Dart 中获取与正则表达式匹配的所有子字符串的最佳方法

    我想获取与字符串中的正则表达式匹配的子字符串列表 做这个的最好方式是什么 dart core 中的 RegExp 对象有Iterable
  • 用java下载包含资源(如图像)的完整网页

    有没有办法下载 html 网页及其所有资源 例如 图像 CSS 我知道如何使用 html 解析器通过遍历所有相关标签来做到这一点 但是没有easy way That is最简单的方法 困难的方法是编写自己的网络库 html 解析器等
  • SwiftUI 中 ObservedObject 和 StateObject 有什么区别

    如果我有一个ObservableObject在 SwiftUI 中我可以将其称为 ObservedObject class ViewModel ObservableObject Published var someText Hello Wo
  • 如何轻松分析 Oracle 包的执行是否存在性能问题?

    我在 11g R2 DB 中有一个 pl sql 包 它有相当多的相关过程和函数 我执行一个顶级函数 它做了很多事情 当前每秒处理 对于 Oracle 的 PL SQL 分层分析器 DBMS HPROF 来说 这似乎是一项不错的工作 作为一
  • 优化 iPhone OpenGL ES 填充率

    我的 iPhone 上有一个 Open GL ES 游戏 我的帧率很糟糕 20fps 在 iPhone 3G 上使用 Xcode OpenGL ES 性能工具 它显示 渲染器利用率 95 至 99 瓷砖利用率 27 我正在绘制很多非常大的图
  • 随机迭代所有排列

    我导入了一个大数组 我想随机迭代所有行排列 该代码被设计为在某个数组产生所需的解决方案时中断 到目前为止的尝试涉及正常的迭代扰动过程 import numpy as np import itertools file np loadtxt m
  • 单击按钮后程序停止响应

    我正在尝试制作我的第一个程序 一个端口扫描器 显示远程服务器上的所有开放端口 我已经让它在 CLI 中工作 感谢互联网 但决定制作一个 GUI Qt5 它 我希望textbox2在输入IP地址并单击 扫描 后输出所有打开的端口 并且显然程序
  • User.Identity.IsAuthenticated 与 WebSecurity.IsAuthenticated

    在 MVC4 应用程序中 在控制器逻辑中 我想检查用户是否已登录 我应该使用 User Identity IsAuthenticated Or WebSecurity IsAuthenticated 据我所知WebSecurity只是一个包
  • 显示 kivy 滑块值的变化 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想知道是否可以将 kivy 微调器值显示为移动标签 以便用户确切地知道滑块的当前值是什么 Thanks 您只需将侦听器绑定到值更改事件
  • Flowtype 函数可能会抛出错误

    有什么方法可以明确定义函数可以抛出错误 显然任何函数都可以抛出错误 但我想明确定义一个函数被设计为抛出并且可能根本不返回值 async function falseThrow promise Promise
  • 如何根据 NSString 类型键测试属性是否存在和类型?

    在我寻求更新 iOS 项目中的核心数据模型时 我在服务器上查询 JSON 对象 这些对象在某种程度上与我的模型的托管实体相对应 我追求的最终结果是从 JSON 输出获得可靠的更新解决方案 对于这个问题中的示例 我将命名核心数据管理对象exi
  • 将 Mongo 中的某些字段从字符串转换为数组

    我有一个文档集合 其中 标签 字段从空格分隔的标签列表切换为单个标签数组 我想将以前的空格分隔字段更新为像新传入数据一样的数组 我也遇到了 type 选择器的问题 因为它将类型操作应用于单个数组元素 即字符串 因此按类型过滤只会返回所有内容
  • SQL 排除包含按分组最大值过滤的几乎重复值的行

    我有一张这样的桌子 ID User ID Skill Skill Level Skill ID 1 1 Project Manager 3 1 2 4 Teacher 6 2 3 2 Teacher 5 2 4 3 Administrato
  • 具有不同主键的 Hibernate 继承

    我正在尝试使用 TABLE PER CLASS 策略创建继承 但我想为每个表使用不同的主键 这可能吗 我有一个类 Register 它有数百万个实例 其中一些实例是 特殊的 并且它们的列和额外列有不同的规则 MappedSuperclass
  • VB6.dll获取调用应用程序路径

    我正在从 VB6 制作一个 dll 我需要知道将使用该 dll 的应用程序的路径 但我不知道如何执行此操作直接来自 dll 有人知道该怎么做吗 先感谢您 嗯 这似乎可以作为 DLL 工作 Option Explicit Private Co
  • &&评估问题

    据我所知 逻辑上 工作原理如下 var test false var foo test 42 这段代码 将分配42 to foo only如果第一个条件被评估为true 所以在这个例子中 foo将保持其当前值 我想知道为什么这个片段根本不起
  • “死内核”Anaconda-Jupyter 紧贴 C++ Windows

    我新安装了 Anaconda v 4 3 1 并使用 conda 命令在 Jupyter 上安装 C 内核的 cling 我用了conda install c conda forge cling 0 3 post 我使用的是 Windows
  • 将全天活动添加到 Google 日历的链接

    所以我看了看添加到 Google 日历的链接 https stackoverflow com questions 10488831 link to add to google calendar 但我想对全天活动做同样的事情 我试过做date
  • ExecutorService,如何知道所有线程何时完成而不阻塞主线程?

    我有一个多线程实现 我创建一个 ExecutorService 并提交要执行的任务 我想知道所有线程何时提交完成而不阻塞主线程和 UI 我试过了ExecutorService awaitTermination 但它会阻塞主线程和 UI 我已
  • 双线性插值

    我得到了通过双线性插值缩放图像的代码 我知道这是可行的 但我无法弄清楚如果近似像素值是边缘 边缘我的意思是它在最后一行或最后一列 像素中的一件事会怎样输入图像然后我可以 gt 坐标 x 1 y 1 的像素 这应该会导致数组索引超出范围错误