Уменьшение и изменение масштаба изображения с помощью циклов - PullRequest
0 голосов
/ 08 сентября 2018

Я относительно новичок в Matlab и пытаюсь понять, почему кусок кода не работает.

У меня есть изображение 512x512, которое необходимо уменьшить до 256, а затем изменить размер до 512. Насколько я понимаю математику, нужно ли указывать пиксели на изображении, чтобы получить 256, а затем суммировать их обратно, чтобы получить 512. Это правильно? Ниже приведен код, на который я смотрю, и если кто-то может объяснить мне, что не так (он дает пустое белое изображение), я был бы признателен:

w = double(imread('walkbridge.tif'));
%read the image

w = w(:,:,1);

for x = 1:256
    for y  = 1:256
        s256(x,y) = (w(2*x,2*y)+ w(2*x,(2*y)-1) + w((2*x)-1,2*y)+ w((2*x)-1,(2*y)-1))/4;
    end
end

for x = 1 : 256
    for y = 1 : 256
        for x1 = 0:1
            for y1 = 0:1
                R1((2*x)-x1,((2*y)-y1)) = s256(x,y);
            end
        end
    end
end

imshow(R1)

1 Ответ

0 голосов
/ 08 сентября 2018

Я получил ваш код на работу, поэтому у вас могут быть неверные значения в ваших данных изображения.А именно, если ваше изображение имеет значения в диапазоне 0..127 или что-то подобное, оно, скорее всего, будет отображаться как все белое.По умолчанию imshow предполагает, что цветовые каналы находятся в диапазоне 0..1.

Возможно, вы также захотите немного упростить свой код, проиндексировав исходный массив вместо доступа к отдельным элементам.,Таким образом, код даже легко изменить:

half_size = 256;

w = magic(2*half_size);
w = w / max(w(:));

figure()
imshow(w)

s = zeros(half_size);
for x = 1:half_size
    for y  = 1:half_size
        ix = w(2*x-1:2*x, 2*y-1:2*y);
        s(x,y) = sum(ix(:))/4;
    end
end

for x = 1:half_size
    for y = 1:half_size
        R1(2*x-1:2*x, 2*y-1:2*y) = s(x,y);
    end
end

figure()
imshow(R1)

Я думаю, что вычисления можно даже векторизовать каким-то образом вместо цикла, но я не стал беспокоиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...