Алгоритм интерполяции все значения 255 -MATLAB - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь создать свой собственный алгоритм интерполяции ближайшего соседа в Matlab, чтобы увеличить изображение с 556 × 612 до 1668 × 1836.

Это домашнее задание !!!

Я уже пытался это сделать, но столкнулся с ошибкой, когда значения внутри M (не все, но большинство) преобразуются в 255 (пустое пространство), и я не могу понять, почему. Любая помощь будет оценена! На картинке изображена зебра.

image

Image after interpolation

    %Take in image and convert to greyscale
I = imread('Zebra.jpg');
Igray = rgb2gray(I);

% Step-3: Resize the image to enlarged 1668x1836 by interpolation
% Step-3(a) : Using nearest neighbour
%First we will need to work out the dimension of the image
[j , k] = size(Igray);
%Now we need to set the size of the image we want
NewX = 1836;
NewY = 1668;
% Work out ratio of old to new
ScaleX = NewX./(j-1);
ScaleY = NewY./(k-1);

%Image Buffer
M = zeros(NewX, NewY);
%Create output image
for count1 = 1:NewX
    for count2 = 1:NewY
        M(count1,count2) = Igray(1+round(count1./ScaleX),1+round(count2./ScaleY));
    end
end
%Show Images
imshow(M);
title('Scaled Image NN');

1 Ответ

0 голосов
/ 30 октября 2018

попробуй imshow(M,[]). Вы создали M без указания типа, что делает его double. double изображения имеют значение [0-1], поэтому imshow по умолчанию делает белый цвет всем с более высоким значением, чем 1.

В качестве альтернативы, создайте M, чтобы быть uint8 как исходное изображение

M = zeros(NewX, NewY,'uint8');

еще лучше код будет:

M = zeros(NewX, NewY,class(Igray));
...