数字图像处理:实验二

打印 上一主题 下一主题

主题 958|帖子 958|积分 2874

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
任务一:
       将不同像素(32、64和256)的原图像放大为像素大 小为1024*1024的图像(图像自选)
           

       要求:1)输出一幅图,该图包含六幅子图,第一排是原图,第 二排是对应放大的图; 2)每幅图的顶头都加上小标题
(表明过程原理:现实上这里用到的图像操作就是调用函数来增长它的像素点数,现实生活中的压缩息争压图像中也会有这种操作,用法就是调用imresize函数即可。之余之后建立一个新的窗口和简单的内容分布,现实上的操作可以会看第一章的基本操作。)
  1. A = imread('1.jpg');  
  2.   
  3. %将图像A的大小调整为32x32像素,结果存储在变量img32中  
  4. img32 = imresize(A,[32,32]);   
  5. %将图像A的大小调整为64x64像素,结果存储在变量img64中  
  6. img64 = imresize(A,[64,64]);   
  7. %将图像A的大小调整为256x256像素,结果存储在变量img256中  
  8. img256 = imresize(A,[256,256]);   
  9.   
  10. %将32x32的图像img32放大到1024x1024像素,结果存储在变量img32_resized中  
  11. img32_resized = imresize(img32, [1024, 1024]);   
  12. %将64x64的图像img64放大到1024x1024像素,结果存储在变量img64_resized中  
  13. img64_resized = imresize(img64, [1024, 1024]);   
  14. %将256x256的图像img256放大到1024x1024像素,结果存储在变量img256_resized中  
  15. img256_resized = imresize(img256, [1024, 1024]);   
  16.   
  17. %创建一个新的图形窗口用于显示图像  
  18. figure;   
  19.   
  20. %在图形窗口的2x3网格中的第一个位置显示32x32的原图  
  21. subplot(2,3,1);   
  22. imshow(img32);  % 显示图像  
  23. title('32x32 原图');  % 设置图像标题  
  24.   
  25. %在图形窗口的2x3网格中的第二个位置显示64x64的原图  
  26. subplot(2,3,2);   
  27. imshow(img64);  % 显示图像  
  28. title('64x64 原图');  % 设置图像标题  
  29.   
  30. %在图形窗口的2x3网格中的第三个位置显示256x256的原图  
  31. subplot(2,3,3);   
  32. imshow(img256);  % 显示图像  
  33. title('256x256 原图');  % 设置图像标题  
  34.   
  35. %在图形窗口的2x3网格中的第四个位置显示32x32放大到1024x1024的图像  
  36. subplot(2,3,4);   
  37. imshow(img32_resized);  % 显示图像  
  38. title('32x32 放大到1024x1024');  % 设置图像标题  
  39.   
  40. % 在图形窗口的2x3网格中的第五个位置显示64x64放大到1024x1024的图像  
  41. subplot(2,3,5);   
  42. imshow(img64_resized);  % 显示图像  
  43. title('64x64 放大到1024x1024');  % 设置图像标题  
  44.   
  45. %在图形窗口的2x3网格中的第六个位置显示256x256放大到1024x1024的图像  
  46. subplot(2,3,6);   
  47. imshow(img256_resized);  % 显示图像  
  48. title('256x256 放大到1024x1024');  % 设置图像标题
复制代码
结果如下:

任务二:去噪声
要求:
1)对所选图添加噪声(可以选择高斯噪声或椒盐噪声),次数为10次、 30 次和50次;
2)对添加噪声后的图像去噪;
3)输出一幅图,该图包含七幅子图,共三排,第一排是 原图,第二排是添加噪声后的图;第三排是对应去噪声后的图像;
4)每幅图的顶头都加上小标踢;
(操作重点:第一、相识所添加的噪声范例和matlab函数的使用方法,第二、相识噪声的特性,第三、学会查找和调用函数) 
  1. img1 = imread('1.png');  
  2. % 如果是彩色图像,则将其转换为灰度图像  
  3. if size(img1, 3) == 3  
  4.     img = rgb2gray(img1);  % 使用rgb2gray函数将彩色图像转换为灰度图像  
  5. end  
  6.   
  7. % 向灰度图像img中添加椒盐噪声  
  8. % 噪声密度为0.01,相当于添加“10次”噪声
  9. noisy_img10 = imnoise(img, 'salt & pepper', 0.01);  
  10. % 噪声密度为0.03,相当于添加“30次”噪声
  11. noisy_img30 = imnoise(img, 'salt & pepper', 0.03);  
  12. % 噪声密度为0.05,相当于添加“50次”噪声  
  13. noisy_img50 = imnoise(img, 'salt & pepper', 0.05);  
  14.   
  15. % 使用中值滤波对添加噪声后的图像进行去噪处理  
  16. denoised_img10 = medfilt2(noisy_img10);  % 对噪声密度为0.01的图像进行去噪  
  17. denoised_img30 = medfilt2(noisy_img30);  % 对噪声密度为0.03的图像进行去噪  
  18. denoised_img50 = medfilt2(noisy_img50);  % 对噪声密度为0.05的图像进行去噪  
  19.   
  20. % 创建一个新的图形窗口用于显示图像  
  21. figure;  
  22.   
  23. % 在图形窗口的3x3网格中的第一个位置显示原图  
  24. subplot(3,3,1);  
  25. imshow(img1);  % 显示原图(如果是彩色图则显示彩色图,如果是灰度图则显示灰度图)  
  26. title('原图');  % 设置图像标题  
  27.   
  28. % 在图形窗口的3x3网格中的第四、五、六个位置分别显示添加不同密度椒盐噪声后的图像  
  29. subplot(3,3,4);  
  30. imshow(noisy_img10);  % 显示噪声密度为0.01的图像  
  31. title('椒盐噪声密度0.01');  % 设置图像标题
  32. subplot(3,3,5);  
  33. imshow(noisy_img30);  % 显示噪声密度为0.03的图像  
  34. title('椒盐噪声密度0.03');  % 设置图像标题
  35. subplot(3,3,6);  
  36. imshow(noisy_img50);  % 显示噪声密度为0.05的图像  
  37. title('椒盐噪声密度0.05');  % 设置图像标题
  38. % 在图形窗口的3x3网格中的第七、八、九个位置分别显示去噪后的图像  
  39. % 注意:原代码中的标题有误,将“高斯噪声”更正为“椒盐噪声”  
  40. subplot(3,3,7);  
  41. imshow(denoised_img10);  % 显示去噪后的噪声密度为0.01的图像  
  42. title('去噪后的椒盐噪声密度0.01');  % 设置图像标题
  43. subplot(3,3,8);  
  44. imshow(denoised_img30);  % 显示去噪后的噪声密度为0.03的图像  
  45. title('去噪后的椒盐噪声密度0.03');  % 设置图像标题  
  46. subplot(3,3,9);  
  47. imshow(denoised_img50);  % 显示去噪后的噪声密度为0.05的图像  
  48. title('去噪后的椒盐噪声密度0.05');  % 设置图像标题
复制代码
结果:

任务三:图像的补集以及对两幅图求并集
要求:
1)求原图的补集;
2)以该图像平均灰度值的3倍得到均值图,并将它与原图做并集操作;
3)输出一幅图,该图包含一排的三幅子图,从左到右为: 原图、补集图和并集图。
4)每幅图的顶头都加上小标题。
(操作重点:第一、相识数字图像处理时的并集、补集的含义,重要是记住实在现时存在的图像然后理解就方便很多,第二、注意理解要求(2)中的得到均值图后在与原图求取并集操作,相识其作用,咸鱼哥建议可以先尝试一下不做并集得到的图像,如许会更方便理解这个概念。)
  1. A = imread('1.jpg');  
  2.   
  3. % 将图像A转换为双精度类型(double),并将像素值归一化到 [0, 1] 区间  
  4. % 这是因为imread读取的图像通常是uint8类型,像素值在 [0, 255] 区间  
  5. A = im2double(A);  
  6. img_1 = A;  
  7. img_2 = A;  
  8. % 计算原图像A灰度值的三倍,并将结果存储在变量N中  
  9. N = 3 * A;  
  10. % 使用min函数确保N中的值不超过1,对于大于1的值,将其设置为1  
  11. N = min(N, 1);  
  12. % 调用自定义函数set_comple计算图像A的补集,并将结果存储在变量h中  
  13. % 补集是指将图像中的每个像素值用1减去该像素值得到的图像  
  14. h = set_comple(A);  
  15. % 调用自定义函数set_union计算图像A和它的三倍图像N的并集,并将结果存储在变量j中  
  16. % 对于两幅图像来说,并集是指逐元素取两幅图像中较大的那个值  
  17. j = set_union(A, N);  
  18.   
  19. % 创建一个新的图形窗口用于显示图像  
  20. figure;  
  21. % 在图形窗口的1x3网格中的第一个位置显示原图A  
  22. subplot(1, 3, 1), imshow(A), title('原图');  
  23. % 在图形窗口的1x3网格中的第二个位置显示补集图像h  
  24. subplot(1, 3, 2), imshow(h), title('补集图');  
  25. % 在图形窗口的1x3网格中的第三个位置显示并集图像j  
  26. subplot(1, 3, 3), imshow(j), title('并集图');  
  27.   
  28. % 定义计算补集的函数set_comple  
  29. % 输入参数f为待计算补集的图像  
  30. % 输出参数img_1为计算得到的补集图像  
  31. function img_1 = set_comple(f)  
  32.     img_1 = 1 - f;  % 计算补集:将每个像素值用1减去  
  33. end  
  34.   
  35. % 定义计算并集的函数set_union  
  36. % 输入参数f1和f2为待计算并集的两幅图像  
  37. % 输出参数img_2为计算得到的并集图像  
  38. function img_2 = set_union(f1, f2)  
  39.     img_2 = max(f1, f2);  % 计算并集:逐元素取两幅图像中较大的值  
  40. End
复制代码
结果:

任务四:多种噪声添加及多种滤波
要求:
1)对原图添加多种不同范例、不同程度的噪声,包括高斯噪声、椒盐噪声、泊松噪声等(至少3种噪声),噪声参数自己订定, 但须得到有对比性噪声效果的图像(泊松噪声的参数可以只添加1 次);
2)然后使用不同的滤波方法举行降噪,如中值滤波、自适 应中值滤波、小波降噪等(至少3种滤波方法);
3)输出一幅图,该图至少包含原图(1张)、噪声图(至少5张)和滤波图(至少3张),一共至少9张子图;
4)每幅图的顶头都加上小标题。
(操作重点:这里针对不同范例、不同程度的噪声要重点理解,可以直接在matlab的函数库中搜索函数,如许会显示噪声范例和种类,但是要求英语水平足够踏实才保举去看。)
  1. d = imread('3.jfif');   
  2. % 将图像d转换为双精度类型(double),以便进行后续处理  
  3. % 因为imread读取的图像通常是uint8类型,像素值在 [0, 255] 区间  
  4. % 转换为double后,像素值会被归一化到 [0, 1] 区间  
  5. d_double = im2double(d);   
  6. % 添加噪声并滤波处理部分   
  7. % 向图像d_double添加高斯噪声,方差为(0.005*5)^2,相当于添加5次高斯噪声的累积效果(但实际上是直接设置了一个较大的方差)  
  8. I1 = imnoise(d_double, 'gaussian', 0, 0.005*5^2);  
  9. % 向I1添加泊松噪声  
  10. I1 = imnoise(I1, 'poisson');  
  11. % 向I1添加斑点噪声,噪声密度为0.2  
  12. I111 = imnoise(I1, 'speckle', 0.2);   
  13. % 向图像d_double添加高斯噪声,方差为(0.001*2)^2,相当于添加2次高斯噪声的累积效果(但实际上是直接设置了一个较小的方差)  
  14. I2 = imnoise(d_double, 'gaussian', 0, 0.001*2^2);  
  15. % 向I2添加泊松噪声  
  16. I2 = imnoise(I2, 'poisson');  
  17. % 向I2添加斑点噪声,噪声密度为0.1  
  18. I222 = imnoise(I2, 'speckle', 0.1);   
  19. % 向图像d_double添加一次较高方差的高斯噪声,方差为0.1^2  
  20. I3 = imnoise(d_double, 'gaussian', 0, 0.1^2);  
  21. % 向I3添加泊松噪声  
  22. I3 = imnoise(I3, 'poisson');  
  23. % 向I3添加斑点噪声,噪声密度非常低,为0.001  
  24. I333 = imnoise(I3, 'speckle', 0.001);   
  25. % 向图像d_double添加椒盐噪声,噪声密度为0.03  
  26. I4 = imnoise(d_double, 'salt & pepper', 0.03);  
  27. % 向I4添加高斯噪声,方差为0.1^2  
  28. I44 = imnoise(I4, 'gaussian', 0, 0.1^2);  
  29. % 向I44添加泊松噪声  
  30. I444 = imnoise(I44, 'poisson');  
  31. % 这行代码是多余的,因为I444已经是double类型,但不会影响后续操作  
  32. I444_d = I444;   
  33. % 向图像d_double添加椒盐噪声,噪声密度为0.02(实际上这是椒盐噪声,但比例较低时椒噪声可能不明显)  
  34. I5 = imnoise(d_double, 'salt & pepper', 0.02);  
  35. % 这行代码没有做任何处理,可能是为了保持格式一致而保留的  
  36. I5 = I5;  
  37. % 向I5添加高斯噪声,方差为0.01^2  
  38. I55 = imnoise(I5, 'gaussian', 0, 0.01^2);  
  39. % 向I55添加泊松噪声  
  40. I555 = imnoise(I55, 'poisson');  
  41. % 滤波处理部分  
  42. % 创建一个5x5大小的高斯滤波器,标准差为1.4  
  43. h1 = fspecial('gaussian', [5 5], 1.4);  
  44. % 使用高斯滤波器h1对I444_d进行滤波处理  
  45. f_I444 = imfilter(I444_d, h1);   
  46. % 创建一个3x3大小的均值滤波器  
  47. h2 = fspecial('average', [3 3]);  
  48. % 使用均值滤波器h2对I333进行滤波处理  
  49. f_I333 = imfilter(I333, h2);  
  50. % 使用均值滤波器h2对I555进行滤波处理  
  51. f_I555 = imfilter(I555, h2);   
  52. % 显示图像部分   
  53. % 创建一个新的图形窗口  
  54. figure;  
  55. % 在3x3的网格中的第一个位置显示原图像d  
  56. subplot(3,3,1), imshow(d), title('原图像');  
  57. % 在3x3的网格中的第二个位置显示噪声图1(经过高斯、泊松、斑点噪声处理后的图像I111)  
  58. subplot(3,3,2), imshow(I111), title('噪声图1(高斯+泊松+斑点)');  
  59. % 在3x3的网格中的第三个位置显示噪声图2(经过高斯、泊松、斑点噪声处理后的图像I222)  
  60. subplot(3,3,3), imshow(I222), title('噪声图2(高斯+泊松+斑点)');  
  61. % 在3x3的网格中的第四个位置显示噪声图3(经过高斯、泊松、斑点噪声处理后的图像I333)  
  62. subplot(3,3,4), imshow(I333), title('噪声图3(高斯+泊松+斑点)');  
  63. % 在3x3的网格中的第五个位置显示噪声图4(经过椒盐、高斯、泊松噪声处理后的图像I444)  
  64. subplot(3,3,5), imshow(I444), title('噪声图4(椒盐+高斯+泊松)');  
  65. % 在3x3的网格中的第六个位置显示噪声图5(经过椒盐、高斯、泊松噪声处理后的图像I555)  
  66. subplot(3,3,6), imshow(I555), title('噪声图5(椒盐+高斯+泊松)');  
  67. % 在3x3的网格中的第七个位置显示对噪声图4进行高斯滤波后的图像f_I444  
  68. subplot(3,3,7), imshow(f_I444), title('对噪声图4高斯滤波');  
  69. % 在3x3的网格中的第八个位置显示对噪声图3进行平均滤波后的图像f_I333  
  70. subplot(3,3,8), imshow(f_I333), title('对噪声图3平均滤波');  
  71. % 在3x3的网格中的第九个位置显示对噪声图5进行平均滤波后的图像f_I555  
  72. subplot(3,3,9), imshow(f_I555), title('对噪声图5平均滤波');
复制代码
结果:
                              

任务五:旋转和放大(原图自选)
要求:
1)将原图像旋转不同角度(至少2个角度),并对旋转后的图放大处理(放大到1024*1024);
2)输出一幅图,该图至少包含原图(1张)、旋转图(至少2张)和滤波图(至少2张),一共至少5张子图;
3)每幅图的顶头都加上小标题。
(操作重点:这里的操作基本上没有困难,以是咸鱼哥不重点赘述,记住imrotate和 imresize两个函数的作用就可以了)
  1. img = imread('1.png');  
  2.   
  3. % 使用imrotate函数将图像img旋转45度,结果存储在rotated_img_45中  
  4. rotated_img_45 = imrotate(img, 45);  
  5. % 使用imrotate函数将图像img旋转90度,结果存储在rotated_img_90中  
  6. rotated_img_90 = imrotate(img, 90);  
  7.   
  8. % 使用imresize函数将旋转45度后的图像rotated_img_45放大到1024x1024像素,结果存储在rotated_img_45_resized中  
  9. rotated_img_45_resized = imresize(rotated_img_45, [1024, 1024]);  
  10. % 使用imresize函数将旋转90度后的图像rotated_img_90放大到1024x1024像素,结果存储在rotated_img_90_resized中  
  11. rotated_img_90_resized = imresize(rotated_img_90, [1024, 1024]);  
  12.   
  13. % 创建一个新的图形窗口,用于显示图像  
  14. figure;  
  15.   
  16. % 使用subplot函数在2x3的网格中的第一个位置创建一个子图,并显示原图img  
  17. subplot(2,3,1);  
  18. imshow(img);  
  19. title('原图'); % 设置子图的标题为“原图”  
  20.   
  21. % 使用subplot函数在2x3的网格中的第二个位置创建一个子图,并显示旋转45度后的图像rotated_img_45  
  22. subplot(2,3,2);  
  23. imshow(rotated_img_45);  
  24. title('旋转45度'); % 设置子图的标题为“旋转45度”  
  25.   
  26. % 使用subplot函数在2x3的网格中的第三个位置创建一个子图,并显示旋转90度后的图像rotated_img_90  
  27. subplot(2,3,3);  
  28. imshow(rotated_img_90);  
  29. title('旋转90度'); % 设置子图的标题为“旋转90度”  
  30.   
  31. % 使用subplot函数在2x3的网格中的第四个位置创建一个子图,并显示旋转45度后放大的图像rotated_img_45_resized  
  32. subplot(2,3,4);  
  33. imshow(rotated_img_45_resized);  
  34. title('旋转45度后放大'); % 设置子图的标题为“旋转45度后放大”  
  35.   
  36. % 使用subplot函数在2x3的网格中的第五个位置创建一个子图,并显示旋转90度后放大的图像rotated_img_90_resized  
  37. subplot(2,3,5);  
  38. imshow(rotated_img_90_resized);  
  39. title('旋转90度后放大'); % 设置子图的标题为“旋转90度后放大”
复制代码
结果:

       第二章针对于数字图像处理的内容的练习和现实的操作,咸鱼哥个人觉得本章内容较为简单,也比较得当初学者和爱好者来学习,本章代码基本上我把逻辑和操作都写上了注释,方便大家理解和使用,为了促进数字图像处理技术的学习,我们一起加油!uu们!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连密封材料

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表