代码报错:此类型的变量不支持使用点进行索引。 出错 A9>@(block)dct2(block.data.dct4) dct_img4 = blkproc(gray_img, [4 4], @(block) dct2(block.data . dct4));% 读取图像 img = imread('AA.jpg'); % 将图像转换为灰度图像 gray_img = rgb2gray(img); % 显示原始图像 subplot(1,3,1); imshow(gray_img); title('Original Image'); % 使用4x4 DCT变换矩阵进行变换 dct4 = dctmtx(4); dct_img4 = blkproc(gray_img, [4 4], @(block) dct2(block.data .* dct4)); % 对变换系数进行压缩 dct_img4(abs(dct_img4) < 20) = 0; % 使用逆DCT变换矩阵进行逆变换 idct4 = idctmtx(4); img_dct4 = blkproc(dct_img4, [4 4], @(block) idct2(block.data .* idct4)); % 显示4x4 DCT压缩后的图像 subplot(1,3,2); imshow(uint8(img_dct4)); title('4x4 DCT Compressed Image'); % 使用16x16 DCT变换矩阵进行变换 dct16 = dctmtx(16); dct_img16 = blkproc(gray_img, [16 16], @(block) dct2(block.data .* dct16)); % 对变换系数进行压缩 dct_img16(abs(dct_img16) < 20) = 0; % 使用逆DCT变换矩阵进行逆变换 idct16 = idctmtx(16); img_dct16 = blkproc(dct_img16, [16 16], @(block) idct2(block.data .* idct16)); % 显示16x16 DCT压缩后的图像 subplot(1,3,3); imshow(uint8(img_dct16)); title('16x16 DCT Compressed Image');
时间: 2024-03-06 14:49:17 浏览: 135
这个错误通常是因为你没有正确指定输入的数据类型。在你的代码中,`block.data .* dct4`中间少了一个点,应该是`block.data .* dct4`。
你可以尝试将输入转换为双精度类型,如下所示:
```matlab
dct_img4 = blkproc(im2double(gray_img), [4 4], @(block) dct2(block.data .* dct4));
```
这里我们使用`im2double()`函数将灰度图像转换为双精度类型,以便在`blkproc()`函数中使用。
相关问题
代码报错:此类型的变量不支持使用点进行索引。 出错 A9>@(block)dct2(block.data.*dct4) dct_img4 = blkproc(gray_img, [4 4], @(block) dct2(block.data .* dct4));
这个错误通常是因为`blkproc()`函数需要的是一个特定类型的输入,而你的输入不符合要求。这个错误可能是因为你没有正确指定输入的数据类型。
你可以尝试将输入转换为双精度类型,如下所示:
```matlab
dct_img4 = blkproc(im2double(gray_img), [4 4], @(block) dct2(block.data .* dct4));
```
这里我们使用`im2double()`函数将灰度图像转换为双精度类型,以便在`blkproc()`函数中使用。
代码报错:此类型的变量不支持使用点进行索引。dct_img4 = blkproc(gray_img, [4 4], @(block) dct2(block.data .* dct4));
这个错误通常是因为你没有正确指定输入的数据类型。在你的代码中,`block.data .* dct4`中间少了一个点,应该是`block.data .* dct4`。
你可以尝试将输入转换为双精度类型,如下所示:
```matlab
dct_img4 = blkproc(im2double(gray_img), [4 4], @(block) dct2(block.data .* dct4));
```
这里我们使用`im2double()`函数将灰度图像转换为双精度类型,以便在`blkproc()`函数中使用。
阅读全文