如何将独特的图像格式添加到Matlab的imread和Matlab的拖放中?

时间:2018-02-05 22:36:30

标签: matlab file imread

我们有许多内部图像格式,我在Matlab中处理。我有所有这些的读/写功能。为了具体,请考虑TGA图像格式,其中存在文件交换image reader

Matlab对imread支持的图像格式有合理的拖放支持。

也就是说,您可以从资源管理器中拖动图像,将其放在"工作区"窗格,Matlab将读入图像,并将其复制到您的工作区。

我希望能够添加拖放支持,并且能够支持TGA文件。 (例如,imread对文件名有很好的自动完成功能,tga_read_image没有。)

3 个答案:

答案 0 :(得分:4)

我认为this正是您所寻找的。引用官方文档:

  

打开名称会打开相应的指定文件或变量   应用

     

您可以通过定义自己的功能来扩展open的功能   openxxx形式的文件处理函数,其中xxx是一个文件   延期。例如,如果你创建一个openlog函数,那么   open函数调用openlog来处理任何带有.log的文件   延期。 open函数返回由您定义的任何单个输出   功能

例如:

function opentga(file) 
    % Your logic for reading and, eventually,
    % displaying TGA files when drag and drop
    % or other opening events occur.
end

这是一个直接从链接中获取的完整工作示例:

function opentxt(filename)
   [~, name, ext] = fileparts(filename); 
   fprintf('You have requested file: %s\n', [name ext]);

   if exist(filename, 'file') == 2
     fprintf('Opening in MATLAB Editor: %s\n', [name ext]);
     edit(filename);
   else
      wh = which(filename);
      if ~isempty(wh)
         fprintf('Opening in MATLAB Editor: %s\n', wh);
         edit(wh);
      else
        warning('MATLAB:fileNotFound', ...
                'File was not found: %s', [name ext]);
      end
   end
end

备用路径包括重载uiopen函数,如this文件交换发布中所示。

答案 1 :(得分:3)

Tommaso's answer开始,我在MATLAB路径上创建了以下M文件:

function out = openics(filename)
img = readim(filename);
if nargout==1
   out = img;
else
   [~,varname] = fileparts(filename);
   disp(['assigning into base: ',varname])
   assignin('base',varname,img);
end

将ICS文件拖放到MATLAB的命令窗口中会在命令行中显示以下内容:

>> uiopen('/Users/cris/newdip/examples/cermet.ics',1)
assigning into base: cermet

检查:

>> whos cermet
  Name          Size             Bytes  Class        Attributes
  cermet      256x256            65714  dip_image              

读取uiopen的代码(您只需键入edit uiopen)表明这会使用文件名调用open,然后使用文件名调用openics并且不输出论点。

您也可以输入

img = open('/Users/cris/newdip/examples/cermet.ics');

致电openics并将图片加载到变量img

注1:我正在使用ICS,因为我没有任何TGA图像可供测试。 ICS是显微镜图像文件格式。

注2:readimDIPimage 中的一个函数

注3:这很酷,我从来没有费心去尝试将文件拖放到MATLAB上。 :)

答案 2 :(得分:1)

其他答案解决了“拖放”问题。它们没有解决如何将专有图像格式集成到 imread 中的问题。这可以通过 imformats 命令直接完成。

我担心如何/为什么花了 3.5 年才弄明白这个问题仍然没有答案......该功能已经存在了 15 年以上。