• 利用Matlab进行图像的数字化


    本文章包含以下内容:

    1、编程实现不同采样数图像的显示效果;

    2、编程实现不同量化等级图像的显示效果;

    3、用手机或数码相机采集图像,并分别编程实现数字化。

    代码如下:(可全部放到 function U() 中)

    1. function U()
    2. clear;
    3. clc;
    4. img = imread('Cameraman.tif');
    5. % 图像采样:
    6. figure('Name', '图像采样'); %开一个标题为“图像采样”的窗口
    7. for i = 1 : 6 % 6 副图像
    8. subplot(2,3,i); %23 列 第 i 个
    9. % x,y由 1 每隔 2^(i-1) 个采样,之后显示
    10. imshow(img(1:2^(i-1):end,1:2^(i-1):end));
    11. str = num2str(2^(9-i)); % 计算图像采样大小后转为字符串,便于显示。
    12. title(['图像(',str,'*',str,')']); %显示图像名称。
    13. end
    14. figure('Name', '图像量化'); %开一个标题为“图像量化”的窗口
    15. j = [8,6,4,3,2,1];
    16. for i = 1 : 6 % 6 副图像
    17. subplot(2,3,i); %23 列 第 i 个
    18. c = 2^(8-j(i)); % 计算灰度减少值
    19. if(i == 6)
    20. % 如果是二值图像,直接以128为分界,为保证图像色调一致,不用255
    21. imshow(uint8((img>=128)*128));
    22. else
    23. % 转为双精度后除以灰度减少值,再取整后乘以灰度减少值。
    24. imshow(uint8(round(double(img)/c)*c));
    25. end
    26. str = num2str(2^(j(i))); % 计算图像量化级数后转为字符串,便于显示。
    27. title([num2str(j(i)),'比特图像(',str,'级)']); %显示图像名称。
    28. end
    29. figure('Name', '琼枝玉树'); %开一个标题为“琼枝玉树”的窗口
    30. img = imread('snow_bush.jpeg');
    31. shuzihua(3,2,img); % 细节图,细采样,粗量化,
    32. figure('Name', '白虹破空'); %开一个标题为“白虹破空”的窗口
    33. img = imread('sky_plane.jpeg');
    34. shuzihua(5,6,img); % 缓变图,粗采样,细量化,
    35. % 数字化函数,cai 隔 2^cai行采样。
    36. % 这里图片为 3648 *2736 所以 cai 取值为[0~9] 越小越好
    37. % liang 量化比特数(8~1)越大越好
    38. % img 数字化图片
    39. function shuzihua(cai,liang,img)
    40. subplot(2,2,1); %22 列 第 1
    41. imshow(img); %输出原图
    42. title('原图'); %标签
    43. img1 = rgb2gray(img); %RGB转化为灰度图像
    44. subplot(2,2,2); %22 列 第 2
    45. imshow(img1); %输出灰度图像
    46. title('灰度图像'); %标签
    47. % 采样后的图像
    48. img1 = img1(1:2^cai:end,1:2^cai:end);
    49. subplot(2,2,3); %22 列 第 3
    50. imshow(img1); %输出采样后图像
    51. title(['采样后图像',num2str(size(img1))]); %标签
    52. % 量化后的图像
    53. c = 2^(8-liang); % 计算灰度减少值
    54. if(liang == 6)
    55. % 如果是二值图像,直接以128为分界,为保证图像色调一致,不用255
    56. img = uint8((img>=128)*128);
    57. else
    58. img1 = uint8(round(double(img1)/c)*c);
    59. end
    60. subplot(2,2,4); %22 列 第 4
    61. imshow(img1); %输出量化后图像
    62. title(['量化后图像',num2str(liang),'比特']); %标签

    结果示例:

    采样会影响图片的像素值,影响图片的清晰程度,量化会影响图片的色彩丰富程度。

    理论上,采样点和量化等级越高,图像质量越高;

    1.当量化级数一定时,采样点数减少时,图上的块状效应逐渐明显;

    2.当采样点数一定时,量化级数越少,图像质量越差。

    当限定数字图像的大小时,为了得到质量较好的图像,可采用如下原则:

    1.对缓变得图像,应该细量化,粗采样,以避免出现假轮廓;

    2.对细节丰富的图像,应细采样,粗量化,以避免模糊。

             图片文件名可能需要更改,放置在程序同目录下

     本文章所需的图片

  • 相关阅读:
    【无标题】
    【Redis】Redis 通用命令、键的过期策略
    Linux常用命令— 硬链接和软链接
    【软件测试】常用ADB命令
    Nacos做配置中心使用
    GCN,R-GCN,岭回归,SVR,随机森林,Adaboost
    草坪维护不求人,高尔夫球场草坪自动化灌溉联网方案
    Thymeleaf th:insert、th:replace、th:include的使用
    【R语言简介】
    【CAN】CAN基础概念5
  • 原文地址:https://blog.csdn.net/weixin_58196051/article/details/126850164