【问题标题】:Determining corrupt JPEG images through exception handling通过异常处理确定损坏的 JPEG 图像
【发布时间】:2014-07-01 17:47:08
【问题描述】:

我正在将位于文件夹中的 .jpg 文件加载到工作区并稍后对它们执行一些操作。但是,在某些文件上,我收到有关损坏的 JPEG 文件的警告。我不需要对这些文件进行肉眼检查,但是,它们应该被排除在流程之外。因此,我需要能够确定给定图像是否以上述方式损坏。

虽然 imread 会抛出这样的警告,但它没有提供标志。我想用一个函数,类似这种方式。

这里是示例代码

path=dir('*.jpg');

for i=1:length(dir)

image=imread(dir(i,1).name);
flag=iscorrupt(MException.last);

if (not(flag))
    ...
end
end

function out=iscorrupt(exception)
exception.message, out=isempty(strfind(exception.message,'corrupt'));

但是,此部分代码无法实现目的,因为它依赖于最后一个异常。因此,在抛出损坏警告后,它将始终设置 True 标志。我想知道,是否可以使用上述方法获取所需的知识。

【问题讨论】:

    标签: image matlab image-processing exception-handling jpeg


    【解决方案1】:

    我已经想到了这一点。留在这里以备将来参考。

    flag=iscorrupt(lastwarn);
    
    ...
    
    
    function out=iscorrupt(exception)
    out=not(isempty(strfind(lower(exception),'corrupt')));
    warning('Image is ignored')
    return;
    

    【讨论】:

      【解决方案2】:

      我会将您的 imread 封装在 try/catch 成语中。这样每次抛出异常时,您都可以简单地继续循环,甚至无需从损坏的图像中读取。当您调用dir 以及您访问每个文件的实际名称的方式时,也会出现一些轻微的拼写错误。不过我会帮你解决的。

      试试这样的:

      path = dir('*.jpg');
      
      for i = 1 : length(path)
          try 
              im = imread(path(i).name);
              %//Continue your code here
              %...
          catch ME %//Skip to next iteration if corrupt message occurs for image i
              if (~isempty(strfind(ME.message,'corrupt')))
                   continue;
              end
          end
       end
      

      旁白:我不确定这是否可行,但查看 MATLAB 文档,您可以通过执行 MException.last('reset'); 重置最近未捕获的异常。如果您在循环的每次迭代中都这样做,这是否也能解决您的问题?

      【讨论】:

      • 肯定会的。对不起一个不好的问题(例外的外星人)。感谢您的详细回复。
      • 绝对不是一个糟糕的问题!你有一个很好的系统来扔掉你不应该看的图像。 try/catch 的工作原理是在try 语句中,您输入可能抛出异常的代码。只要try 语句中的任何内容导致异常,代码将立即跳转到您可以处理异常的catch 块。 ME 将包含在 try 块中引发的任何异常。它类似于您在任何面向对象的编程语言(C++、Java、Python)中看到的。希望这对您有所帮助!
      猜你喜欢
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 2017-02-18
      • 2012-02-16
      • 2017-02-15
      • 1970-01-01
      • 2021-07-28
      • 2021-12-26
      相关资源
      最近更新 更多