разница между окном рисунка и осями в графическом интерфейсе MATLAB

Для отображения выходных изображений я использовал код ниже

function displayResults(filename, header)
    figure('Position',[200 100 700 400], 'MenuBar', 'none', 'Name', header, 'Resize', 'off', 'NumberTitle', 'off');
    % Open 'filename' file... for reading...
    fid = fopen(filename);
    i = 1;                  % Subplot index on the figure...
    while 1
        imagename = fgetl(fid);
        if ~ischar(imagename), break, end       % Meaning: End of File...    
        [x, map] = imread(imagename);
        subplot(2,5,i);
        subimage(x, map);
        xlabel(imagename);
        i = i + 1;
    end
    fclose(fid);

Это привело к правильному выводу (http://s1273.photobucket.com/user/Chethan_tv/media/figure_zps326033c2.jpg.html)

где все изображения четкие.

Тем не менее, я изменил приведенный выше код, чтобы он отображался в моем графическом интерфейсе, который имеет 5 осей на выходе, код показан ниже.

 function displayResults(filename,hObject, eventdata, handles)
    % Open 'filename' file... for reading...
    fid = fopen(filename);
    for N=6:1:10
        imagename = fgetl(fid);
        if ~ischar(imagename), break, end       % Meaning: End of File...
        x=imread(imagename);
        ax = handles.(sprintf('axes%d', N));
        imshow(x, 'Parent', ax);
        xlabel(ax, imagename);  
    end
    fclose(fid);

Но это привело к низкому качеству вывода (http://s1273.photobucket.com/user/Chethan_tv/media/fig_zpsa48de802.jpg.html?so‌​rt=3&o=0)

Что случилось с качеством изображения? любой соответствующий ответ заметен.


person Chethan    schedule 05.05.2013    source источник


Ответы (1)


Из того, что я вижу, вы работаете с индексированными изображениями.

Это другое поведение на самом деле находится в вашем коде, потому что в первом случае вы отображаете свои изображения с помощью функции subimage и предоставляете ей цветовую карту (subimage(x, map); в вашем коде). Во втором случае вы используете функцию imshow и не предоставляете ей цветовую карту (imshow(x); в вашем коде), поэтому вы отображаете индексы цвета вместо фактических цветов.

Две функции, subimage и imshow, по-разному обрабатывают карты цветов в индексированных изображениях, см. руководство по этому вопросу. Попробуйте и этот пример, чтобы увидеть все в одном месте

fn          = 'peppers.png';

rgb         = imread(fn); % This is RGB image
NR          = 2;
NC          = 3;
NI          = NR * NC;
CMapStep    = 12;


figure('Position',[200 100 800 600], 'MenuBar', 'none' );
hAxes = zeros(NI,1);

% displaying original images using subimge
MsgStr = 'subimage(x, map)';
for k=1:NI
    % convert it to indexed image so each image has different number of colors in its colormap
    [x, map] = rgb2ind(rgb,k*CMapStep);
    hAxes(k)    = subplot(NR,NC,k);    % store axes handles for later
    subimage(x, map);
    title(hAxes(k), sprintf('%s: image #%d',MsgStr,k) );
    drawnow;
    pause(1);
end

% displaying original images WITHOUT colormap using imshow
MsgStr = 'imshow(x)';
for k=1:NI
    % convert it to indexed image so each image has different number of colors in its colormap
    [x, map] = rgb2ind(rgb,k*CMapStep);
    imshow(x, 'Parent',hAxes(k) );
    title(hAxes(k), sprintf('%s: image #%d',MsgStr,k) );
    drawnow;
    pause(1);
end

% displaying original images WITH colormap using imshow
MsgStr = 'imshow(x,cmap)';
for k=1:NI
    % convert it to indexed image so each image has different number of colors in its colormap
    [x, map]    = rgb2ind(rgb,k*CMapStep);
    imshow(x,map, 'Parent',hAxes(k) );
    title(hAxes(k), sprintf('%s: image #%d',MsgStr,k) );
    drawnow;
    pause(1);
end

В качестве решения вашей проблемы вы должны придерживаться одного и того же способа отображения ваших изображений везде или конвертировать их в изображения RGB, чтобы избежать проблем, связанных с цветовой картой.

person anandr    schedule 05.05.2013
comment
Извините, небольшая ошибка. Я использовал image(x, 'Parent', ax);, а не imshow(x, 'Parent', ax);. . . даже при том, что я получаю изображения низкого качества. - person Chethan; 05.05.2013
comment
Можете ли вы предоставить вывод imfinfo('YorImageFileName.Ext')? - person anandr; 05.05.2013
comment
функция imfinfo не отображает изображение, она просто возвращает структуру, извините, можете ли вы привести пример того, как это использовать? где я могу использовать это в своем коде? - person Chethan; 05.05.2013
comment
Меня интересуют поля Format, BitDepth и ColorType проблемного изображения. - person anandr; 05.05.2013
comment
Все изображения растрового типа. Для моего кода CBIR мне нужно растровое изображение с глубиной цвета 8 бит. Поэтому с помощью программного обеспечения Photoshop я создал эти изображения, и моя база данных полна изображений этого типа. В фотошопе: image›mode›индексированный цвет и 8 бит/канал, наконец, я сохранил его в формате .bmp - person Chethan; 05.05.2013
comment
В любом случае, наконец, я получил хорошую четкость. просто я изменил окончательное изображение на RGB, затем я отобразил [x,map]=imread(imagename); rgb=ind2rgb(x,map); ax = handles.(sprintf('axes%d', N)); hold(ax, 'off'); image(rgb, 'Parent', ax); Спасибо за ваше руководство. - person Chethan; 05.05.2013