%% close all; clc; clear all; % img = imread('GZY.jpg'); imshow(img); title('original image'); % 计算傅里叶变换 img_F = fft2(img); [M, N] = size(img); s = sum(abs(img_F(1:M, 1:N))); % 行求和 s = sum(s); % 列求和 ave = s / (M * N); disp(['average value of image is: ',num2str(ave)]); S = log(1 + abs(img_F)); figure; imshow(S); title('二维图像显示幅度谱'); x = 0:1:255; y = 0:1:255; [x, y] = meshgrid(x, y); figure; mesh(S); title('三维图像显示幅度谱'); img_Q = angle(img_F); figure; plot(img_Q); title('二维图像显示相位谱'); x = 0:1:255; y = 0:1:255; [x, y] = meshgrid(x, y); figure; mesh(img_Q); title('三维图像显示相位谱');这是我的代码,帮我修改这个问题average value of image is: 7772.7855 错误使用 matlab.graphics.chart.primitive.Surface 值必须是数值类型的标量、向量或数组。 出错 mesh (第 98 行) hh = matlab.graphics.chart.primitive.Surface('ZData',z,'FaceColor',fc,'EdgeColor','flat', ... 出错 untitled (第 29 行) mesh(S);
时间: 2024-04-11 08:29:11 浏览: 104
根据您提供的代码,问题出在第 29 行的 mesh(S) 上,错误是因为传递给 mesh 函数的参数 S 不是数值类型的标量、向量或数组。根据之前的代码,S 是一个二维的幅度谱,它应该是一个数值类型的矩阵。
您可以尝试使用 surf(S) 函数来绘制三维图像显示幅度谱。请将第 29 行的 mesh(S) 替换为 surf(S),并运行代码。这样应该可以解决这个问题。
修改后的代码如下:
```matlab
close all;
clc;
clear all;
%
img = imread('GZY.jpg');
imshow(img);
title('original image');
% 计算傅里叶变换
img_F = fft2(img);
[M, N] = size(img);
s = sum(abs(img_F(1:M, 1:N))); % 行求和
s = sum(s); % 列求和
ave = s / (M * N);
disp(['average value of image is: ',num2str(ave)]);
S = log(1 + abs(img_F));
figure;
imshow(S);
title('二维图像显示幅度谱');
x = 0:1:255;
y = 0:1:255;
[x, y] = meshgrid(x, y);
figure;
surf(S);
title('三维图像显示幅度谱');
img_Q = angle(img_F);
figure;
plot(img_Q);
title('二维图像显示相位谱');
x = 0:1:255;
y = 0:1:255;
[x, y] = meshgrid(x, y);
figure;
mesh(img_Q);
title('三维图像显示相位谱');
```
请尝试修改后的代码,并运行看看是否能够解决问题。如果您还有其他问题,请随时提问。
阅读全文