Странное поведение при изменении xlim [duplicate]

Вы можете сделать это с помощью фильтра replace ?

contents: "{{ lookup('file', '/etc/foo.txt') | replace('\n', '')}}"

6
задан Luis Mendo 17 August 2014 в 15:50
поделиться

2 ответа

Мне кажется, что артефакты вызваны интерполяцией 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'. Артефакты очень ослаблены, хотя они все еще видны в некоторых частях. Другие методы интерполяции дают аналогичные результаты.

enter image description here [/g1]

enter image description here [/g2]

enter image description here [/g3]

6
ответ дан Luis Mendo 28 August 2018 в 03:47
поделиться

Как уже упоминалось, MATLAB использует интерполяцию ближайшего соседа для изображений с повышающей дискретизацией и понижающей дискретизацией для отображения. Поскольку окно изображения изменено пользователем, артефакты из-за этого могут меняться только путем перемещения окна вокруг.

Одним из решений является написать класс-оболочку для отображения изображения, который отслеживает события окна и изменяет размер с помощью imresize, чтобы более точно отображать данные на экране. Я написал такой класс, и он общедоступен. Я все время работаю с обработкой изображений, а встроенная система отображения MATLAB очень раздражает. Я использую этот:

http://www.mathworks.com/matlabcentral/fileexchange/46051-rviewer

Он предназначен для того, взамен для image, и будет правильно перепрограммировать изображения.

1
ответ дан Tony 28 August 2018 в 03:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: