Matlab图像转换矩阵

时间:2017-10-22 16:53:50

标签: matlab image-processing computer-vision

我对Matlab很新。我正在学习一些图像处理基础知识,而且我对如何在不使用imtranslate 的情况下编写翻译感到困惑。

这是我的代码,但它只显示黑色背景。谢谢。

img = imread('name2.png');
figure(1);

% pixel matrix
[orig_x, orig_y,z] = size(img); 

final_x = 600;                      
final_y = 600;                     

% define the final array with calculated dimensions and fill the array with zeros ie.,black
final_img = uint8(zeros([final_x final_y 3 ]));

for i = 1 : size(final_img, 1)
    for j = 1 : size(final_img, 2)        
          new_x = img(i) + 5;
          new_y = img(j) + 5;

         % fprintf('X: %f\n',new_x); % prints 255

        final_img(i) = new_x;
        final_img(j) = new_y;

    end
end

imshow(final_img);

3 个答案:

答案 0 :(得分:0)

  1. final_img:
  2. 您已使用新的x和新y定义了“final_img”,但您没有将红色/绿色/蓝色值替换为零。它全是黑色的,因为你的初始化用final全部填充了final_img。

    也许尝试这个而不是你写的:

    %{
    [X,map] = imread('name2.png');
    figure(1);
    
    % X should be 600 by 600 
    
    %Translate X however you wish, e.g.:
    X = X +5;
    
    %Verify that the colormap, map, is not empty, and convert 
    %the data in X to RGB and store as your final_img.
    
    if ~isempty(map)
        final_img = ind2rgb(X,map);
    end
    %}
    
    1. 我也不确定你是否只想用一个i来索引img,而没有像你一样的其他维度: new_x = img(i)+ 5; ?

答案 1 :(得分:0)

这是“仅翻译”转型的一种解决方案。

I  = imread('Lenna.png');
shiftX = 5; % shift columns
shiftY = 5; % shift rows

% Assigning empty matrix for result, expected to be shiftX-1 larger in rows and shiftY-1 larger in columns
nI = uint8( zeros(size(I,1)+shiftY-1, size(I,2)+shiftX-1, size(I,3));

% Translate 
nI(shiftY:end, shiftX:end, :)  = I;
imshow(nI)

现在图片将从(x,y) = (5,5) instead of (1,1)开始。另请注意,在matlab图像坐标系中,x和y轴从左上角开始(documentation)。

答案 2 :(得分:0)

对于您特定代码中的问题,我在其中的一些评论中写道。 实现图像转换的一种简短方法是通过2D卷积和一个零过滤器,只有一个1,它将保留图像的值,但根据过滤器的大小和{的位置重新定位它们。 {1}}在其中。

如果我做对了,你似乎想要移动图像但保留整个图像的大小。所以:

1

仅举例来说,让我们将“cameraman”翻译为20行和列:

r=3; c=5;                                % number of rows and columns to move
filt=zeros(r*2+1, c*2+1); filt(end)=1;   % the filetr
img2=conv2(img,filt,'same');               % the translated image

cameraman

img=imread('cameraman.tif');
imshow(img)

cameraman2