1. 完成一个主函数调用三个功能的子函数。并显示图像处理后的结果。如果输入图像是彩图,RGB三个通道请做相同处理
2. 子函数完成如下功能:
(1). 对原始的8bits图像进一步均匀量化,量化函数入口参数img和量化的位数bits,出口参数为量化后的图像,请参考附件给出的函数quantize_image说明;(2). 对输入图像完成二值抖动。参考课件25页,typical methods中的方法3.具体步骤包括 i). 构建抖动模板,要求模板大小通过参数可调,模板中每个整数仅出现一次,位置随机; ii). 根据抖动模板的大小完成完成对原始图像的均匀量化; iii). 根据量化后的值与模板对应位置比较大小产生二值图。(3). 对输入图像完成Floyd_Steinberg抖动。 要求和注意事项: i). 量化函数可用子函数(1)代替find_closest_palette_color(); ii). 注意处理后的结果不能越界;
下面是主函数的代码,各个子函数代码在附件内:
主函数:
clear;
%定义全局变量
pattern_size=8;%dither函数的参数
dbits_color=6;
dbits_gray=2;
image_old_color=imread('lena.jpg');
image_old_gray=imread('lena.bmp');
subplot(2,3,1);
imshow(image_old_color);
title('原彩色图像');
subplot(2,3,4);
imshow(image_old_gray);
title('原黑白图像');
image_d_color=dither_by_pattern(image_old_color, pattern_size); %dither函数可以直接处理彩色图像或黑白图像
subplot(2,3,2);
imshow(image_d_color);
title('dither函数处理彩色图像');
image_d_gray=dither_by_pattern(image_old_gray, pattern_size); %dither函数可以直接处理彩色图像或黑白图像
subplot(2,3,5);
imshow(image_d_gray);
title('dither函数处理黑白图像');
image_f_color=floyd_steinberg(image_old_color, dbits_color);
subplot(2,3,3);
imshow( image_f_color );%floyd函数可以直接处理彩色图像或黑白图像
title('floyd函数处理彩色图像');
image_f_gray=floyd_steinberg(image_old_gray, dbits_gray);
subplot(2,3,6);
imshow( image_f_gray );%floyd函数可以直接处理彩色图像或黑白图像
title('floyd函数处理黑白图像');
psnr_color=PSNR(image_old_color,image_f_color)
psnr_gray=PSNR(image_old_gray,image_f_gray)
全部资料51hei下载地址:
MATLAB_图像抖动.zip
(78.66 KB, 下载次数: 54)
|