繁体   English   中英

在Matlab /八度音阶中使图像遵循螺旋/方程的路径

[英]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 XN的矩阵,并使该矩阵遵循螺旋的路径。 如何使图像遵循螺旋方程的路径?

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

彩虹线(输入/重塑矩阵):

彩虹线图像

因此彩虹螺旋输出看起来像这样。 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)

那么您需要使用某种遮罩消除不必要的像素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM