在Java中读取IDX文件类型

2023-12-29

我已经用 Java 构建了一个图像分类器,我想针对此处提供的图像进行测试:http://yann.lecun.com/exdb/mnist/ http://yann.lecun.com/exdb/mnist/

不幸的是,如果您下载 train-images-idx3-ubyte.gz 或任何其他 3 个文件,它们的文件类型都是: .idx1-ubyte

第一个问题: 我想知道是否有人可以指导我如何将 .idx1-ubyte 制作为位图(.bmp)文件?

第二个问题: 或者我一般如何读取这些文件?

有关 IDX 文件格式的信息: IDX 文件格式是各种数值类型的向量和多维矩阵的简单格式。 基本格式是:

magic number 
size in dimension 0 
size in dimension 1 
size in dimension 2 
..... 
size in dimension N 
data

幻数是一个整数(MSB 在前)。前 2 个字节始终为 0。

第三个字节编码数据的类型:

0x08: unsigned byte 
0x09: signed byte 
0x0B: short (2 bytes) 
0x0C: int (4 bytes) 
0x0D: float (4 bytes) 
0x0E: double (8 bytes)

第 4 个字节编码向量/矩阵的维数:1 表示向量,2 表示矩阵......

每个维度的大小都是 4 字节整数(MSB 在前,高位在前,与大多数非 Intel 处理器一样)。

数据的存储方式类似于 C 数组,即最后一个维度的索引变化最快。


非常简单,正如 WPrecht 所说:“URL 描述了您必须解码的格式”。这是我的 idx 文件的 ImageSet 导出器,不是很干净,但是做了它必须做的事情。

public class IdxReader {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        FileInputStream inImage = null;
        FileInputStream inLabel = null;

        String inputImagePath = "CBIR_Project/imagesRaw/MNIST/train-images-idx3-ubyte";
        String inputLabelPath = "CBIR_Project/imagesRaw/MNIST/train-labels-idx1-ubyte";

        String outputPath = "CBIR_Project/images/MNIST_Database_ARGB/";

        int[] hashMap = new int[10]; 

        try {
            inImage = new FileInputStream(inputImagePath);
            inLabel = new FileInputStream(inputLabelPath);

            int magicNumberImages = (inImage.read() << 24) | (inImage.read() << 16) | (inImage.read() << 8) | (inImage.read());
            int numberOfImages = (inImage.read() << 24) | (inImage.read() << 16) | (inImage.read() << 8) | (inImage.read());
            int numberOfRows  = (inImage.read() << 24) | (inImage.read() << 16) | (inImage.read() << 8) | (inImage.read());
            int numberOfColumns = (inImage.read() << 24) | (inImage.read() << 16) | (inImage.read() << 8) | (inImage.read());

            int magicNumberLabels = (inLabel.read() << 24) | (inLabel.read() << 16) | (inLabel.read() << 8) | (inLabel.read());
            int numberOfLabels = (inLabel.read() << 24) | (inLabel.read() << 16) | (inLabel.read() << 8) | (inLabel.read());

            BufferedImage image = new BufferedImage(numberOfColumns, numberOfRows, BufferedImage.TYPE_INT_ARGB);
            int numberOfPixels = numberOfRows * numberOfColumns;
            int[] imgPixels = new int[numberOfPixels];

            for(int i = 0; i < numberOfImages; i++) {

                if(i % 100 == 0) {System.out.println("Number of images extracted: " + i);}

                for(int p = 0; p < numberOfPixels; p++) {
                    int gray = 255 - inImage.read();
                    imgPixels[p] = 0xFF000000 | (gray<<16) | (gray<<8) | gray;
                }

                image.setRGB(0, 0, numberOfColumns, numberOfRows, imgPixels, 0, numberOfColumns);

                int label = inLabel.read();

                hashMap[label]++;
                File outputfile = new File(outputPath + label + "_0" + hashMap[label] + ".png");

                ImageIO.write(image, "png", outputfile);
            }

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (inImage != null) {
                try {
                    inImage.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (inLabel != null) {
                try {
                    inLabel.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

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

在Java中读取IDX文件类型 的相关文章

  • 从 java sdk 向对等方发送提案时出现访问被拒绝错误

    我正在尝试使用以下代码查询区块链并收到访问被拒绝错误 我也遇到同样的错误sendTransactionProposal方法也是如此 UserContext adminUserContext RegisterEnrollUser regist
  • Java Runtime.getRuntime().freeMemory() 问题

    我搜索并看到了一些线程 但没有一个能够解决我遇到的具体问题 我正在尝试使用以下方式监视我的内存使用情况Runtime getRuntime freeMemory Runtime getRuntime maxMemory and Runtim
  • Java:无法从同一包中的不同类访问静态变量

    这很奇怪 因为我有一个可以访问 Frame dimension getWidth 的 Character 类 及其伙伴 getHeight 但是当我想在 Map 类中使用它时 Eclipse 强调了它并且无法给我反馈 运行该程序最终会出现
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • “java.net.MalformedURLException:未找到协议”读取到 html 文件

    我收到一个错误 java net MalformedURLException Protocol not found 我想读取网络上的 HTML 文件 mainfest uses permission android name android
  • 如何在 Antlr4 中为零参数函数编写语法

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

    我是 GET 的新手 顺便说一句 它给我留下了深刻的印象 并且发现它对于像我这样熟悉 C NET 桌面技术并愿意编写 Web 应用程序的人来说非常有吸引力 我根据 GWT Eclipse 向导生成的示例启动了自己的项目 该项目生成带有面板的
  • Integer.parseInt("0x1F60A") 以 NumberformatException 结束

    我尝试从数据库中获取长字符串内的表情符号代码 格式如下 0x1F60A 所以我可以访问代码 但它将是String 起初 我尝试通过执行以下操作来转换变量tv setText beforeEmo getEmijoByUnicode int e
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • 从 GitHub 上托管的 Spring Cloud Config Server 访问存储库的身份验证问题

    我在 GitHub 上的存储库中托管配置 如果我将回购公开 一切都好 但如果我将其设为私有 我将面临 org eclipse jgit errors TransportException https github com my user m
  • 在另一个模块中使用自定义 gradle 插件模块

    我正在开发一个自定义插件 我希望能够在稍后阶段将其部署到存储库 因此我为其创建了一个独立的模块 在对其进行任何正式的 TDD 之前 我想手动进行某些探索性测试 因此 我创建了一个使用给定插件的演示模块 到目前为止 我发现执行此操作的唯一方法
  • Java:如何为山区时间创建 TimeZone 对象?

    必须不禁用夏令时 嗯 在这个清单 http en wikipedia org wiki List of tz database time zones在 zoneinfo 时区名称中 有很多声称是 山地时间 找到最适合您想要的那个 然后使用它
  • QuerySyntaxException:无法找到类

    我正在使用 hql 生成 JunctionManagementListDto 类的实际 Java 对象 但我最终在控制台上出现以下异常 org hibernate hql internal ast QuerySyntaxException
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • 在 Google App-Engine JAVA 中将文本转换为字符串,反之亦然

    如何从字符串转换为文本 java lang String to com google appengine api datastore Text 反之亦然 Check Javadoc http code google com appengin
  • 使用按钮作为列表的渲染器

    我想使用一个更复杂的渲染器 其中包含列表的多个组件 更准确地说 类似于this https stackoverflow com questions 10840498 java swing 1 6 textinput like firefox
  • OpenCSV:将嵌套 Bean 映射到 CSV 文件

    我正在尝试将 bean 映射到 CSV 文件 但问题是我的 bean 具有其他嵌套 bean 作为属性 所发生的情况是 OpenCSV 遍历属性找到一个 bean 然后进入其中并映射该 bean 内的所有数据 如果找到另一个 bean 它就
  • org.apache.commons.net.io.CopyStreamException:复制时捕获 IOException

    我正在尝试使用以下方法中的代码将在我的服务器中创建的一些文件复制到 FTP 但奇怪的是我随机地低于错误 我无法弄清楚发生了什么 Exception org apache commons net io CopyStreamException
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复

随机推荐

  • 如何使用引导网格映射图像数组?

    我正在使用 gatsby js 构建一个投资组合网站 所有照片都发布在 WordPress 中 由 graphQL 获取并渲染到网站 我正在尝试使用 bootstrap grid 来组织照片并使其响应 但是因为 graphQL 返回一个数组
  • 为整个应用程序创建一个公共对象

    我创建了一项活动 用于创建用户个人资料并存储其信息 例如姓名 ID 个人资料图片等 该信息是唯一的 应该在应用程序的所有活动中使用 我想知道创建一个存储所有信息并在所有活动中使用它的通用对象的最佳方法是什么 我已阅读有关捆绑包和 JSON
  • Python - 使用 SAML 2.0 登录站点

    我很难找到资源来帮助我解决我遇到的问题 我有一个使用 SAML 2 0 保护的网站 有人可以向我指出显示如何使用 SAML 2 0 登录站点的资源吗 大多数 python 模块似乎都与实现 SAML 2 有关 我只需要登录到实现 SAML
  • 如何解析 REST 服务的 POST 参数?

    看来我还有另一个 JSON 问题 这次是在发布到 REST 服务时 我在用Flask Restful api add resource Records rest records
  • 如何使用 rand-int 生成可重复的随机序列

    我希望能够使用生成可重复的数字rand在 Clojure 中 具体来说 我想要调用的结果rand nth或Incanter的sample可重复 这些称为rand int这又调用rand 我想通了这个问题 https stackoverflo
  • 如何从静态方法访问控件?

    我有一个 C NET 应用程序 其中有一个MainForm和几节课 这些类之一接收来自网络的传入数据消息 我需要将这些消息的文本附加到多行文本框中MainForm 我可以将消息发送到中的方法MainForm通过使方法静态 但静态方法无法访问
  • 两个交互类的基于可变参数模板的多重继承...

    在我当前的项目中 我需要能够提供基于模板的多重继承 Mixin 模式 and有两个可以一起交互的类 具有镜像多重继承树 即一个类在同一继承级别使用另一个类的方法 长话短说 我似乎找不到一种优雅的方式来构建它 下面是一个简化的测试用例 您可以
  • 设置参考号并将其与文本文件中的其他数据进行比较

    该项目基于眼动仪 让我简要介绍一下该项目背后的想法 以便更好地理解我的问题 我有 Tobii C 眼动仪的硬件 这个眼动仪将能够给出我正在看的地方的 X Y 坐标 但这个装置非常敏感 当我看 1 个点时 眼动仪会发出许多不同的坐标数据 但在
  • Rails 应用程序内的 AMQP 订阅者

    是否可以使用我的 Rails 应用程序启动 AMQP 订阅者 可能通过初始化程序或其他东西 我想让它同时运行 也可以与 Rails 模型交互 下面是我的意思的伪代码示例 queue subscribe do msg body Foo cre
  • Asp 控制转发器内的 Id 生成

    我在中继器 itemtemplate 中定义了一些控件 问题出在自动生成的 Id 上 这是我的页面
  • 使用 CALayer 时无法编译代码

    由于某种原因 当我尝试使用 CALayer 时出现链接器错误 OBJC CLASS CALayer referenced from 我导入了以下标头 import
  • PropertyWrapper 中不存在的 Codable 属性的默认值

    我创建了一个像这样的propertyWrapper propertyWrapper public struct DefaultTodayDate Codable public var wrappedValue Date private le
  • 如何使用 JavaScript 将音频静音/取消静音

    我在这里创建了我的函数的小提琴 http jsfiddle net rhy5K 10 http jsfiddle net rhy5K 10 现在我想为用户提供声音 静音 取消播放 选项 例如 如果我点击 一个链接 那么声音就像Get rea
  • 为什么用“to_excel”保存时pandas数据框样式丢失?

    Per 这个例子 https pandas pydata org pandas docs stable user guide style html Export to Excel the to excel方法应保存带有背景颜色的 Excel
  • 显示“页面加载”消息

    我试图在 html 页面中显示用于 页面加载 的图像 gif 直到显示 my script py 的输出 但我不知道该怎么做 This http jsfiddle net 9X4gW 这是我到目前为止所得到的 提前谢谢了 HTML div
  • 使用反射从字符串获取属性值

    I am trying implement the Data transformation using Reflection https web archive org web 20210122135227 http geekswithbl
  • 最后的手段/万能的/后备模板过载

    正如我之前提出的一个问题所示 重载解析 模板和继承 https stackoverflow com questions 28405921 overload resolution templates and inheritance 28406
  • 组织我的 Python 项目

    我正在启动一个 Python 项目 预计其中有 20 个或更多类 作为良好的做法 我想将它们分别放入一个单独的文件中 然而 项目目录很快就会被文件淹没 或者当我这样做时 如果我将要导入的文件放入文件夹中 我将无法再导入它 如何从另一个文件夹
  • FastAPI 中的可选查询参数

    我不明白可选查询参数 https fastapi tiangolo com tutorial query params optional parameters在 FastAPI 中 它与什么不同默认查询参数 https fastapi ti
  • 在Java中读取IDX文件类型

    我已经用 Java 构建了一个图像分类器 我想针对此处提供的图像进行测试 http yann lecun com exdb mnist http yann lecun com exdb mnist 不幸的是 如果您下载 train imag