【问题标题】:How can I improve the code for decoding the QR code in MatLab?如何改进 MatLab 中二维码解码的代码?
【发布时间】:2017-12-20 01:37:01
【问题描述】:

我正在使用Zxing's code 中的wrap-up package 来解码 MatLab 中的二维码。我有 300 张带有二维码的图像,但 300 张中只有 120 张可以读取。当我尝试Zxing's decode site时,可以读取更多代码。我搜索了一下,并将我在 MatLab 中使用的代码与Zxing GitHub source code 中的代码进行了比较。我在下面显示的代码中发现了一些差异。有人还建议这种更改会有所作为(here)。 (我猜它只是在BufferedImageLuminanceSource 之前添加了一个new。对吧?)

我对Java一无所知。所以我问如何改进 MatLab 中的以下步骤?我在 Zxing 的源代码中也看到了,它使用了许多不同的方法来尝试阅读代码。如何将此添加到我的 MatLab 代码中?如果工作量太大,有人可以建议我一个链接,以便我自己学习如何改进它吗?

来自 MatLab 的 ExchangeFile:

jimg = im2java2d(img);
source = BufferedImageLuminanceSource(jimg);
bitmap = BinaryBitmap(HybridBinarizer(source));

来自Zxing的代码:

    private static void processImage(BufferedImage image,
                                   HttpServletRequest request,
                                   HttpServletResponse response) throws IOException, ServletException {

    LuminanceSource source = new BufferedImageLuminanceSource(image);
    BinaryBitmap bitmap = new BinaryBitmap(new GlobalHistogramBinarizer(source));
    Collection<Result> results = new ArrayList<>(1);

不知道把Zxing的GitHub和FileExchange的代码放在这里对不对。所以如果这样做是不对的,请告诉我。谢谢你!

编辑

也许我的问题不是很清楚。所以总结一下我的问题:我发现一些 QR 图像在 MatLab 的包装脚本中无法解码,但可以在 Zxing 在线解码器中读取。由于 MatLab 中的包装脚本使用与 Zxing 在线解码器相同的功能,导致结果不同的原因可能是什么?

【问题讨论】:

    标签: java matlab qr-code zxing


    【解决方案1】:

    来自this page

    只需要一个 JAR?

    如果你只需要一个预编译的 JAR 文件,你总能找到编译好的 来自Maven release repository 的资源,包括最近的 快照/夜间构建。

    按照上述链接,您应该能够下载运行ZXing 所需的jar 包。您在Mathworks File Exchange 上找到的包装脚本也为您指明了相同的方向,请查看test_qr.m 文件顶部的注释:

    % 请下载并构建 zxing % 的核心和 javase 部分来自 这里-http://code.google.com/p/zxing/

    由于Google Code 已关闭,原始链接已失效,但它会将您重定向到相同的GitHub 存储库。

    拥有jar 文件后,将它们与属于脚本的Matlab 文件一起放入一个文件夹中。确保test_qr.m 中的javaaddpath 指令正确指向jar 包,并且您应该拥有使脚本工作的一切。

    如果您下载的 jar 文件是在与您的 Matlab 安装使用的版本不同的版本下编译的(要检查这一点,只需从您的命令窗口运行命令 version -java),事情会变得更加复杂,因为您必须下载ZXing 的源文件并在Java IDE 中的正确版本下编译它们,例如Eclipse。但是我们不要对此进行太多讨论,因为目前我们不知道您是否会偶然发现此类问题。

    【讨论】:

    • 感谢托马索的回答!但我现在有点困惑。实际上 File Exchange 中的 wrapper 包在我的 MatLab 中工作,但不如 Zxing 在线解码器。我的意思是在 MatLab 中读取失败的图像可以被在线解码器读取。这就是为什么我想比较他们使用的代码,并改进 MatLab 中的方法,因为包装脚本是在 2010 年创建的。
    • 这里的重点是我认为Zxing的解码器使用了更好的方式来解码二维码,这是最近更新的,而MatLab中的包装器包仍然使用旧功能,因为它没有自 2010 年以来更新。但我不确定我的想法是否正确。
    • 问题是包装器只是一个包装器。我的意思是,文件交换脚本的唯一目的是让 Zxing 包在 Matlab 下运行。不是通过改进Matlab部分才能提高Zxing输出...
    • 是的,没错。所以我并不是要改进 MatLab 部分。相反,我的意思是我想改进包装脚本,可以使用 Zxing 的方法对其进行更新。正如您在 Zxing 的 DecodeServelet 脚本中看到的那样,它在那里为BufferedImageLuminanceSource 函数使用了一个新调用。 (我不确定我在这一步是否理解正确。)所以我在考虑是否可以将包装脚本中的BufferedImageLuminanceSource 调用更改为新调用,就像它在 Zxing 的 DecodeServelet 脚本中一样。你知道我的意思吗?
    • 不,我不明白。包装器只使用了 BufferedImageLuminanceSource 的一个实例,该实例在 Zxing 源代码中定义。如果要更改 BufferedImageLuminanceSource 的工作方式,则必须更改 Zxing 源代码中的那个 java 类,而不是 matlab 脚本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 2012-03-24
    相关资源
    最近更新 更多