img = imread('a.tif'); imshow(img); title('Original Image'); img = im2double(img); dft = fft2(img); dft_shift = fftshift(dft); magnitude_spectrum = log(1 + abs(dft_shift)); figure, imshow(magnitude_spectrum, []); title('DFT Magitude Spectrum'); [N, M] = size(img); dct_coeff = zeros(N, M); for i = 1:N dct_coeff(i, :) = my_dct(img(i, :)); end for j = 1:M dct_coeff(:, j) = my_dct(dct_coeff(:, j)'); end figure, imshow(dct_coeff, []); title('DCT Coefficients'); M = size(dft_shift, 1); N = size(dft_shift, 2); P = magnitude_spectrum; mx = M/2; ny = N/2; p1 = P(1:mx, 1:ny); p2 = P(mx+1:M, 1:ny); p3 = P(1:mx, ny+1:N); p4 = P(mx+1:M, ny+1:N); P = [p4,p3;p2,p1]; figure, imshow(P, []); title('Image Spectrum'); idft_shift = ifftshift(dft_shift); idft =ifft2(idft_shift); idft = abs(idft); idct_coeff = zeros(N, M); for i = 1:N idct_coeff(i, :) = my_idct(dct_coeff(i, :)); end for j = 1:M idct_coeff(:, j) = my_idct(idct_coeff(:, j)'); end idct_coeff = (idct_coeff - min(idct_coeff(:))) ./ (max(idct_coeff(:)) - min(idct_coeff(:))); figure; subplot(1, 3, 1), imshow(img, []); title('Original Image'); subplot(1, 3, 2), imshow(idft, []); title('Reconstructed Image (IDFT)'); subplot(1, 3, 3), imshow(idct_coeff, []); title('Reconstructed Image (IDCT)'); 我在运行之后显示 警告: 当用作索引时,冒号运算符需要整数操作数
时间: 2023-06-05 18:04:59 浏览: 129
这个警告是因为在使用冒号运算符时,需要整数操作数,而不是浮点数。例如,如果需要访问一个矩阵的所有行,可以使用 “1 : end”来代替“1.0 : end”。请注意确保在使用冒号运算符时使用整数操作数,以避免出现警告。
相关问题
补充代码img_checkeboard = io.imread("checkeboard8_pixeldup_8.tif") plt.subplot(121) plt.imshow(img_checkeboard) plt.axis('off') plt.title("Original") img_binary = np.zeros_like(img_checkeboard) plt.subplot(122) plt.imshow(img_binary) plt.axis('off') plt.title("Binary")
好的,我来补充一下完整的代码,供您参考:
```python
import numpy as np
import matplotlib.pyplot as plt
from skimage import io, filters
# 读取图像
img_checkeboard = io.imread("checkeboard8_pixeldup_8.tif")
# 显示原图
plt.subplot(121)
plt.imshow(img_checkeboard)
plt.axis('off')
plt.title("Original")
# 二值化处理
img_binary = np.zeros_like(img_checkeboard)
threshold = filters.threshold_otsu(img_checkeboard)
img_binary[img_checkeboard >= threshold] = 1
# 显示二值化后的图像
plt.subplot(122)
plt.imshow(img_binary)
plt.axis('off')
plt.title("Binary")
plt.show()
```
这段代码中使用了 `skimage` 库中的 `io.imread` 方法读取图像;使用 `filters.threshold_otsu` 方法计算出阈值,并将图像转化为二值化图像。最后使用 `matplotlib` 库中的 `imshow` 和 `subplot` 方法显示原图和二值化后的图像。
希望能对您有所帮助!
matlab实现:1. 对图像进行DCT变换 首先对图像autumn.tif进行DCT变换,然后对DCT变换后的矩阵中小于10的系数设为0,然后重构图像。要求显示原始图像、DCT变换结果和重构后的图像。 2. 使用Matlab对图像作DCT压缩 把输入图像cameraman.tif划分成8×8的图像块,计算它们的DCT系数,并且只保留64个DCT系数中的10个。然后对每个图像块利用这10个系数进行逆DCT变换来重构图像。
1. 对图像进行DCT变换
首先,读取图像并显示:
```matlab
img = imread('autumn.tif');
imshow(img);
title('Original Image');
```
接下来,进行DCT变换:
```matlab
dct_img = dct2(img);
```
然后,将小于10的系数设为0:
```matlab
dct_img(abs(dct_img) < 10) = 0;
```
最后,进行反DCT变换并显示重构后的图像:
```matlab
idct_img = idct2(dct_img);
imshow(idct_img);
title('Reconstructed Image');
```
完整代码如下:
```matlab
img = imread('autumn.tif');
imshow(img);
title('Original Image');
dct_img = dct2(img);
dct_img(abs(dct_img) < 10) = 0;
idct_img = idct2(dct_img);
imshow(idct_img);
title('Reconstructed Image');
```
2. 使用Matlab对图像作DCT压缩
首先,读取图像并显示:
```matlab
img = imread('cameraman.tif');
imshow(img);
title('Original Image');
```
然后,将图像划分成8x8的块,并计算DCT系数:
```matlab
dct_img = blkproc(double(img), [8 8], @dct2);
% 将DCT系数矩阵展成一维向量
dct_vec = reshape(dct_img, [], 1);
```
接着,只保留64个DCT系数中的10个:
```matlab
sorted_dct = sort(abs(dct_vec), 'descend');
threshold = sorted_dct(10*64);
dct_vec(abs(dct_vec) < threshold) = 0;
```
最后,对每个图像块利用这10个系数进行逆DCT变换来重构图像:
```matlab
dct_img_compressed = reshape(dct_vec, 8, 8, []);
idct_img = blkproc(dct_img_compressed, [8 8], @idct2);
imshow(idct_img);
title('Compressed Image');
```
完整代码如下:
```matlab
img = imread('cameraman.tif');
imshow(img);
title('Original Image');
dct_img = blkproc(double(img), [8 8], @dct2);
dct_vec = reshape(dct_img, [], 1);
sorted_dct = sort(abs(dct_vec), 'descend');
threshold = sorted_dct(10*64);
dct_vec(abs(dct_vec) < threshold) = 0;
dct_img_compressed = reshape(dct_vec, 8, 8, []);
idct_img = blkproc(dct_img_compressed, [8 8], @idct2);
imshow(idct_img);
title('Compressed Image');
```
阅读全文
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![rtf](https://img-home.csdnimg.cn/images/20210720083624.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)