Как добавить уникальные форматы изображений в imread Matlab и перетаскивание Matlab?

У нас есть ряд внутренних форматов изображений, которые я обрабатываю в Matlab. У меня есть функции чтения/записи для всех из них. Для конкретности, рассмотрим!--1-->TGA формат изображения, для которого существует файловый обмен образ читателя.

Matlab имеет разумную поддержку перетаскивания для форматов изображений, поддерживаемых imread.

то есть, вы можете перетащить изображение из проводника, поместите его на панель "рабочая область" , и Matlab прочитает в изображение и скопируйте его в рабочее пространство.

Я хотел бы иметь возможность добавлять поддержку перетаскивания и поддержку imread для файлов TGA. (imread имеет приятный автозаполнения для имен например, tga_read_image не.)

2 ответов


начиная от ответ Томмазо, Я создал следующий M-файл на моем пути MATLAB:

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: readim - это функция, в DIPimage

Примечание 3: это круто, я никогда не пытался перетащить файлы на MATLAB раньше. :)


Я думаю этой это то, что вы ищете. Цитируя официальную документацию:

открыть имя открывает указанный файл или переменную в соответствующем применение

вы можете расширить функциональность open, определив свой собственный функция обработки файлов формы openxxx, где xxx-это файл расширение. Например, если вы создаете функцию openlog, то функция open вызывает openlog для обработки любых файлов с.бревно расширение. Функция 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

альтернативный путь состоит в перегружая