在Matlab中保存图像矩阵中不同程度的多条线

时间:2014-07-03 06:24:10

标签: arrays matlab matrix

为了推断,我们如何获得我们定义的2D矩阵的某些度数的一维数组,如image显示的总是在2D矩阵的中心有起点。 2D矩阵的长度始终相等。

2 个答案:

答案 0 :(得分:0)

如果您知道中心,请说x_c, y_c然后循环遍历所有像素(当前像素为x_p, y_p)并使用angle = atan2(y_p-y_c, x_p-x_c)计算角度。这将为您提供一个精确的角度,因此您需要使用floor(angle)之类的方法对其进行舍入。然后,您可以检查所需子角度(例如30度)的模数是否为0,以查看角度是否良好。如果是,您可以使用数据执行所需操作。

x_c = picture_center_x;
y_c = picture_center_x;
angleMod = 30;

for x_p = 1:pixels
    for y_p = 1:pixels
        angle = floor(atan2(y_p-y_c, x_p-x_c))*180/pi;
        if (mod(angle, angleMod) == 0)
            %push back pixel data
        end
    end
end

非常简单的算法,希望它可以为你工作。

答案 1 :(得分:-1)

以下是您的问题的解决方案:

center = [26,26]; %position of your center
size= 51;  %size of the matrix
matrix=bsxfun(@plus, ([(center(1)-size):1:0, 1:1:(size-center(1))].^2)',[(center(2)-size):1:0, 1:1:(size-center(2))].^2); %my generated matrix to test the solution
angle= [0,30,60,90,120,150,180,210,240,270,300,330]; %array of angles 
angle=angle*pi/180; % changing angles into rad (from degree)
sine_angle=sin(angle); %computing sine of those angles
cos_angle=cos(angle);  %computing cosine of those angles
cos_max = abs(size-center(2))*cos_angle.^(-1); %computing the maximum distance in left right direction of each angle
sine_max = abs(size-center(1))*sine_angle.^(-1); %computing the max. distance in up/down direction of each angle
sine_cos_max = min(abs(cos_max), abs(sine_max)); %checking which boarder is reached first
angle_array = cell(1,numel(angle));
k=0;
while k<=max(sine_cos_max)
    for m=1:1:numel(angle)
        if k <= sine_cos_max(m)
            helper = angle_array{1,m};
            helper2 = [helper, matrix(center(1)+floor(sine_angle(m)*k),center(2)+floor(cos_angle(m)*k))];
            angle_array(1,m) = {helper2};
        end
    end
    k=k+1;
end

你必须使用地板,因为在使用过的例子中,否则你会尝试将矩阵外的元素加到30度和60度。或者,您可以在if情况下使用另一个参数来检查它是否仍然可能。