如何修复图像滤波中‘Arrays have incompatible sizes for this operation.’错误
错误原因与修复方案
错误原因
你遇到的「数组尺寸不兼容」问题,核心是图像维度不匹配:
- 若
1.png是彩色图像,imread读取后会生成三维数组(M×N×3,对应RGB三个颜色通道)。 - 你用
[M, N] = size(f)只获取了前两个维度,但后续生成的H_hb是二维数组(M×N);而fft2(double(f))对三维图像处理后得到的F是三维数组(M×N×3),二维数组与三维数组无法直接执行逐元素相乘操作,因此报错。
修复方案
根据你的需求选择以下两种方案之一:
方案1:转为灰度图处理(适合仅需灰度信息的文本检测)
在读取图像后添加一行代码,将彩色图转为二维灰度图,确保所有变量维度一致:
% Load the image and convert to grayscale f = imread('1.png'); f = rgb2gray(f); % 转为灰度图,将三维数组变为二维 [M, N] = size(f); % High-boost filter fc = 0.1; [f1, f2] = freqspace([M N], 'meshgrid'); d = sqrt(f1.^2 + f2.^2); H_hp_gauss = 1 - exp(-(d.^2)/2/fc^2); A = 2; H_hb = (A-1) + H_hp_gauss; % Image to filter F = fft2(double(f)); F = fftshift(F); G = F .* H_hb; G = ifftshift(G); g = ifft2(G); g = real(g); g = uint8(g); imshow(g)
方案2:保留彩色通道处理(需保留图像彩色信息)
将二维的滤波器H_hb扩展为三维,匹配彩色图像的通道数(复制到三个RGB通道):
% Load the image. f = imread('1.png'); [M, N, C] = size(f); % 读取图像的三维尺寸(高度、宽度、通道数) % High-boost filter fc = 0.1; [f1, f2] = freqspace([M N], 'meshgrid'); d = sqrt(f1.^2 + f2.^2); H_hp_gauss = 1 - exp(-(d.^2)/2/fc^2); A = 2; H_hb = (A-1) + H_hp_gauss; H_hb = repmat(H_hb, [1 1 C]); % 将二维滤波器扩展为三维,匹配通道数 % Image to filter F = fft2(double(f)); F = fftshift(F); G = F .* H_hb; G = ifftshift(G); g = ifft2(G); g = real(g); g = uint8(g); imshow(g)
内容的提问来源于stack exchange,提问作者Yiğit Yılmaz
相关产品推荐
相关产品推荐

