首页 文章

通过异常处理确定损坏的JPEG图像

提问于
浏览
1

我正在将驻留在文件夹中的.jpg文件加载到工作区,并在以后对它们执行一些操作 . 但是,在某些文件上,我收到有关Corrupt 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标志 . 我想知道,如果有可能使用上述方法捕获所需的知识 .

2 回答

  • 1

    我已经达到了这一点 . 留在这里以供将来参考 .

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

    我会将 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'); 重置最近未捕获的异常 . 如果你在循环的每次迭代中都这样做了,这还能解决你的问题吗?

相关问题