Matlab错误:无法执行赋值,因为左侧的大小为1×10,右侧的大小为1×25

在使用Matlab进行图像处理时,特别是进行边缘参数计算时,你可能会遇到'无法执行赋值,因为左侧的大小为 1×10,右侧的大小为 1×25'这样的错误。这通常是由于在存储Zernike矩时数组大小不匹配导致的。

错误分析:

该错误提示表明你正在尝试将一个大小为 1×25 的数组赋值给一个大小为 1×10 的数组。 在代码中,edgeParams(i, :) = zernikeMoments; 这一行试图将 zernikeMoments (大小为 1×25)赋值给 edgeParams 的第 i 行(大小为 1×10)。

解决方案:

要解决这个问题,需要确保 edgeParamszernikeMoments 的大小一致。 1. 修改 edgeParams 的大小:edgeParams 的大小修改为可以容纳 zernikeMoments 的大小,即 1×25。 matlab edgeParams = zeros(length(row), 25); % 将大小改为 1×25

  1. 检查 ZernikeMomentsnew 函数: 确保 ZernikeMomentsnew 函数返回的 zernikeMoments 的大小确实是 1×25。 matlab zernikeMoments = zeros(1, 25); % 在函数内部也需要修改大小

**修改后的代码:**matlab% 读取图像img = imread('lena.jpg');% 将图像转换为灰度图像grayImg = rgb2gray(img);% Canny边缘检测edges = edge(grayImg, 'canny');% 显示边缘图像figure;imshow(edges);title('Canny边缘图像');% 获取边缘像素的坐标[row, col] = find(edges);% 计算边缘参数edgeParams = zeros(length(row), 25); % 修改数组大小为1×25for i = 1:length(row) % 获取当前像素的邻域 neighborhood = grayImg(row(i)-1:row(i)+1, col(i)-1:col(i)+1); % 计算Zernike矩 zernikeMoments = ZernikeMomentsnew(neighborhood); % 存储边缘参数 edgeParams(i, :) = zernikeMoments;end

% Zernike矩计算函数function zernikeMoments = ZernikeMomentsnew(img) % 将图像转换为双精度类型 img = im2double(img); % 获取图像尺寸 [M, N] = size(img); % 计算图像的中心 centerX = (N+1)/2; centerY = (M+1)/2; % 计算归一化的Zernike矩 zernikeMoments = zeros(1, 25); % 修改数组大小为1×25 for n = 0:4 for m = -n:2:n % 初始化Zernike矩 moment = 0; % 计算每个像素的Zernike矩 for i = 1:M for j = 1:N % 计算像素的极坐标 rho = sqrt((i-centerY)^2 + (j-centerX)^2) / centerY; theta = atan2(j-centerX, i-centerY); % 计算Zernike多项式 R = ZernikePolynomialnew(n, m, rho); % 计算Zernike矩 moment = moment + img(i, j) * R * exp(-1i * m * theta); end end % 归一化Zernike矩 moment = moment * (n+1) / pi; % 存储Zernike矩 zernikeMoments(n^2+n+m+1) = moment; end endend

% Zernike多项式计算函数function R = ZernikePolynomialnew(n, m, rho) R = 0; for s = 0:(n-abs(m))/2 R = R + (-1)^s * factorial(n-s) / (factorial(s) * factorial((n+abs(m))/2-s) * factorial((n-abs(m))/2-s)) * rho^(n-2*s); end R = R * sqrt((n+1) / pi);end

总结:

在进行矩阵和数组操作时,始终要注意它们的大小是否匹配。仔细检查代码并进行必要的调整可以避免这类错误。


原文地址: https://www.cveoy.top/t/topic/fzYI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录