我对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);
答案 0 :(得分:0)
您已使用新的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 :(得分: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
img=imread('cameraman.tif');
imshow(img)