使图像遵循螺旋路径/matlab/octave 中的方程式
Making an image follow the path of a spiral / an equation in matlab / octave
我知道我可以使用下面的示例代码制作螺旋线,但是如何让图像遵循如下所示的方程式的螺旋线路径。
t = linspace(0,4*pi,400);
x = t.*cos(t);
y = t.*sin(t);
plot(x,y)
示例:我有一张图像 (RGB),如下所示,我将其转换为 1 x N 矩阵。我的想法是制作一个 1 X N 矩阵 并让该矩阵沿着螺旋路径移动。我怎样才能让图像遵循螺旋方程的路径?
f=imread('/tmp/rgb_line.png');
[Frows Fcols Fdims]=size(f)
f=double(f); %need to convert to double to do math functions on it
for ii=1:Fdims
img(:,:,ii)=reshape(f(:,:,ii)',1,numel(f(:,:,ii))); %reshape array as one row and 3 dimensions
end
彩虹线(input/reshaped矩阵):
所以彩虹螺旋输出看起来像这样。
Please note that the order of the colours are not correct
因为这是我能找到的最接近我正在尝试做的事情的图像。
PS: 我正在使用类似于 Matlab 的 Octave 4.0
你可以试试这样:
rgb1 = jet(256);
len1 = size(rgb1,1);
RGB1 = permute(rgb1,[3 1 2]);
figure; imshow(RGB1);
len2 = 400;
t = linspace(0,4*pi,len2);
x = t.*cos(t);
y = t.*sin(t);
rgb2 = interp1(1:len1,rgb1,linspace(1,len1,len2));
[xg,yg] = meshgrid([-t(end:-1:2) t],[-t(end:-1:2) t]);
RGB2 = zeros([size(xg) 3]);
% interpolate for the desired coordinates
for c = 1:3
RGB2(:,:,c) = griddata(x,y,rgb2(:,c),xg,yg);
end
figure; imshow(RGB2)
然后您需要使用某种蒙版消除不需要的像素。
我知道我可以使用下面的示例代码制作螺旋线,但是如何让图像遵循如下所示的方程式的螺旋线路径。
t = linspace(0,4*pi,400);
x = t.*cos(t);
y = t.*sin(t);
plot(x,y)
示例:我有一张图像 (RGB),如下所示,我将其转换为 1 x N 矩阵。我的想法是制作一个 1 X N 矩阵 并让该矩阵沿着螺旋路径移动。我怎样才能让图像遵循螺旋方程的路径?
f=imread('/tmp/rgb_line.png');
[Frows Fcols Fdims]=size(f)
f=double(f); %need to convert to double to do math functions on it
for ii=1:Fdims
img(:,:,ii)=reshape(f(:,:,ii)',1,numel(f(:,:,ii))); %reshape array as one row and 3 dimensions
end
彩虹线(input/reshaped矩阵):
所以彩虹螺旋输出看起来像这样。
Please note that the order of the colours are not correct
因为这是我能找到的最接近我正在尝试做的事情的图像。
PS: 我正在使用类似于 Matlab 的 Octave 4.0
你可以试试这样:
rgb1 = jet(256);
len1 = size(rgb1,1);
RGB1 = permute(rgb1,[3 1 2]);
figure; imshow(RGB1);
len2 = 400;
t = linspace(0,4*pi,len2);
x = t.*cos(t);
y = t.*sin(t);
rgb2 = interp1(1:len1,rgb1,linspace(1,len1,len2));
[xg,yg] = meshgrid([-t(end:-1:2) t],[-t(end:-1:2) t]);
RGB2 = zeros([size(xg) 3]);
% interpolate for the desired coordinates
for c = 1:3
RGB2(:,:,c) = griddata(x,y,rgb2(:,c),xg,yg);
end
figure; imshow(RGB2)
然后您需要使用某种蒙版消除不需要的像素。