Matlab 错误提示: 位置 1 处的索引无效 - 如何解决亚像素边缘检测错误
在 Matlab 中,数组的索引必须是正整数或逻辑值,不能是浮点数。在亚像素边缘检测代码中,出现错误的地方是在亚像素插值的双线性插值部分。在计算 subpixel_edge(y, x) 时,使用了浮点数索引 dx_floor 和 dy_floor。要解决这个问题,可以将 dx_floor 和 dy_floor 转换为整数索引,即使用 floor 函数将其取整。
修改后的代码如下:
function [subpixel_edge] = subpixelext(edge_img, moments)
[rows, cols] = size(edge_img);
subpixel_edge = zeros(rows, cols);
for x = 2:(cols-1)
for y = 2:(rows-1)
if edge_img(y, x) == 1
dx = (moments(2, 1)*x + moments(2, 2)*y) / moments(1, 1);
dy = (moments(1, 2)*x + moments(2, 2)*y) / moments(1, 1);
% 亚像素插值
dx_floor = floor(dx);
dy_floor = floor(dy);
dx_frac = dx - dx_floor;
dy_frac = dy - dy_floor;
% 双线性插值
subpixel_edge(y, x) = (1-dx_frac)*(1-dy_frac)*edge_img(dy_floor, dx_floor) + ...
dx_frac*(1-dy_frac)*edge_img(dy_floor, dx_floor+1) + ...
(1-dx_frac)*dy_frac*edge_img(dy_floor+1, dx_floor) + ...
dx_frac*dy_frac*edge_img(dy_floor+1, dx_floor+1);
end
end
end
end
这样修改后,应该能够解决索引无效的错误提示。
原文地址: https://www.cveoy.top/t/topic/fzJN 著作权归作者所有。请勿转载和采集!