将X,Y浮点坐标转换为二进制矩阵,然后进行霍夫线变换
Convert X,Y floating point coordinates to binary matrix and then perform a Hough line transform
是否可以计算 xy 浮点数组的霍夫线变换,类似于 python 中的这个 matlab 代码?
BW=full(sparse(x,y,true));
数据看起来像
您在 MATLAB 中的示例仅适用于整数 (x,y) 坐标。
例如
% I use a 10x10 identity matrix to simulate a line of points
% And scale the resulting x, y coordinates to be floating point
[X, Y] = find(eye(10));
X = X * 0.1;
Y = Y * 0.1;
A = full(sparse(X, Y, true));
抛出错误
Error using sparse. Index into matrix must be an integer.
如果你想将浮点坐标转换为二进制矩阵,我知道的唯一方法是抽取你的space。
% Precision of the decimated grid
scale = .01;
% Scale the X, Y values to be integers greater than 1
row_indices = round((Y - min(Y))/scale) + 1;
col_indices = round((X - min(X))/scale) + 1;
% row values also need to be flipped
% i.e. y = 0 should be the maximum row in the matrix to maintain the same orientation of the coordinate system
row_indices = max(row_indices) - row_indices + 1;
% Create matrix using your method
A = full(sparse(row_indices, col_indices, true));
% Each row and column in A corresponds to the value in these range vectors
xrange = min(X):scale:max(X);
yrange = max(Y):-scale:min(Y);
测试这些转换是否产生了预期的结果。我绘制了矩阵。
figure;
subplot(1,2,1); imagesc(A);
xticks(1:20:100); xticklabels(xrange(1:20:end));
yticks(1:20:100); yticklabels(yrange(1:20:end));
subplot(1,2,2); plot(X, Y, 'ko');
看起来不错。
使用 numpy 应该很容易实现类似的方法。
是否可以计算 xy 浮点数组的霍夫线变换,类似于 python 中的这个 matlab 代码?
BW=full(sparse(x,y,true));
数据看起来像
您在 MATLAB 中的示例仅适用于整数 (x,y) 坐标。
例如
% I use a 10x10 identity matrix to simulate a line of points
% And scale the resulting x, y coordinates to be floating point
[X, Y] = find(eye(10));
X = X * 0.1;
Y = Y * 0.1;
A = full(sparse(X, Y, true));
抛出错误
Error using sparse. Index into matrix must be an integer.
如果你想将浮点坐标转换为二进制矩阵,我知道的唯一方法是抽取你的space。
% Precision of the decimated grid
scale = .01;
% Scale the X, Y values to be integers greater than 1
row_indices = round((Y - min(Y))/scale) + 1;
col_indices = round((X - min(X))/scale) + 1;
% row values also need to be flipped
% i.e. y = 0 should be the maximum row in the matrix to maintain the same orientation of the coordinate system
row_indices = max(row_indices) - row_indices + 1;
% Create matrix using your method
A = full(sparse(row_indices, col_indices, true));
% Each row and column in A corresponds to the value in these range vectors
xrange = min(X):scale:max(X);
yrange = max(Y):-scale:min(Y);
测试这些转换是否产生了预期的结果。我绘制了矩阵。
figure;
subplot(1,2,1); imagesc(A);
xticks(1:20:100); xticklabels(xrange(1:20:end));
yticks(1:20:100); yticklabels(yrange(1:20:end));
subplot(1,2,2); plot(X, Y, 'ko');
看起来不错。
使用 numpy 应该很容易实现类似的方法。