Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function arquivo2 = redimensionar(arquivo1, tipo, num1, num2)
- if !exist(arquivo1) || (tipo != 1 && tipo != 2) || (num1 == 0 || num2 == 0)
- arquivo2 = "";
- return;
- endif
- I = imread(arquivo1);
- xsize = round(columns(I)*num1);
- ysize = round(rows(I)*num2);
- tempI = zeros(ysize,xsize,size(I,3));
- tempI = uint8 (tempI);
- maxy = rows(tempI)-1;
- maxx = columns(tempI)-1;
- if tipo == 1 #nearest neighbor
- for i = 0:maxy
- real_y = i/num2;
- index_y = ifelse(mod(real_y,1) <= 0.5,floor(real_y),ceil(real_y));
- index_y(index_y >= rows(I)) = index_y-1;
- for j = 0:maxx
- real_x = j/num1;
- index_x = ifelse(mod(real_x,1) <= 0.5,floor(real_x),ceil(real_x));
- index_x(index_x >= columns(I)) = index_x-1;
- tempI(i+1,j+1,:) = I(index_y+1,index_x+1,:);
- endfor
- endfor
- else #bilinear
- ratio_x = columns(I)/columns(tempI);
- ratio_y = rows(I)/rows(tempI);
- for i = 1:ysize
- real_y = (ratio_y * i) + (0.5 * (1 - 1/num2));
- for j = 1:xsize
- real_x = (ratio_x * j) + (0.5 * (1 - 1/num1));
- real_x(real_x < 1) = 1;
- real_x(real_x > rows(I) - 0.001) = rows(I) - 0.001;
- x1 = floor(real_x);
- x2 = x1 + 1;
- real_y(real_y < 1) = 1;
- real_y(real_y > columns(I) - 0.001) = columns(I) - 0.001;
- y1 = floor(real_y);
- y2 = y1 + 1;
- prox1 = I(y1,x1,:);
- prox2 = I(y1,x2,:);
- prox3 = I(y2,x1,:);
- prox4 = I(y2,x2,:);
- a1 = (y2-real_y)*(x2-real_x);
- a2 = (y2-real_y)*(real_x-x1);
- a3 = (x2-real_x)*(real_y-y1);
- a4 = (real_y-y1)*(real_x-x1);
- tempI(i,j,:) = a1 * prox1 + a2 * prox2 + a3 * prox3 + a4 * prox4;
- endfor
- endfor
- endif
- imwrite(tempI,"output.png");
- arquivo2 = "output.png";
- return;
- endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement