MATLAB图像去噪算法:空间域和频率域结合
% 读入带噪声图像 img = imread('noisy_image.png');
% 中值滤波去除椒盐噪声 img_med = medfilt2(img);
% 计算DCT变换矩阵 dct_mtx = dctmtx(size(img,1));
% 在空间域上对每个8x8块进行DCT变换,并进行频率域滤波 for i = 1:size(img,1)/8 for j = 1:size(img,2)/8 block = img_med((i-1)8+1:i8, (j-1)8+1:j8); block_dct = dct_mtx * double(block) * dct_mtx'; % 在频率域上进行滤波,例如: block_dct(abs(block_dct) < 100) = 0; block_dct(abs(block_dct) > 1000) = 0; block_filtered = dct_mtx' * block_dct * dct_mtx; img_filtered((i-1)8+1:i8, (j-1)8+1:j8) = block_filtered; end end
% 计算均方误差 mse = sum(sum((double(img) - double(img_filtered)).^2)) / numel(img);
% 显示结果 imshow(img_filtered); title(['MSE = ', num2str(mse)]);
原文地址: https://www.cveoy.top/t/topic/oy5n 著作权归作者所有。请勿转载和采集!