Мне кажется, что артефакты вызваны интерполяцией Matlab для перевода пикселей изображения в пиксели экрана.
Было бы неплохо иметь возможность изменить метод интерполяции, используемый Matlab при отображении изображения , но это не представляется возможным (изменение 'renderer'
не помогает). Таким образом, вы можете вручную интерполировать изображение в соответствии с размером экрана, а затем отобразить это интерполированное изображение, для которого один пиксель изображения теперь соответствует одному пикселю экрана. Таким образом, Matlab не нужно интерполировать.
Для выполнения интерполяции я использовал функцию imresize
. Я нахожу, что все доступные методы интерполяции дают более или менее одинаковые результаты, кроме 'box'
, что еще хуже, чем автоматическая интерполяция экрана Matlab. Я прикладываю некоторые результаты:
m = 344;
n = 358;
image(im)
set(gca, 'units', 'pixels', 'Position', [40 40 m n])
imresize
с использованием опции 'box'
. Артефакты похожи или даже более выражены. imr = imresize(double(im)/255, [m n], 'box'); %// convert to double and
%// interpolate to size [m, n]
image(imr/max(imr(:))) %// display with image size matching display size.
%// Normalization is required because the interpolation may give values
%// out of the interval [0 1]
set(gca, 'units', 'pixels', 'Position', [40 40 m n])
'bilinear'
. Артефакты очень ослаблены, хотя они все еще видны в некоторых частях. Другие методы интерполяции дают аналогичные результаты. [/g1]
[/g2]
[/g3]