• Matlab图像处理


    区域生长

    区域生长是种已受到人工智能领域中的计算机视觉界十分关注的图像分割方法。这种方法是从把一幅图像分成许多小区域开始的。这些初始的区域可能是小的邻域甚至是单个像素。在每个区域中,对经过适当定义的能反映一个物体内成员隶属程度的性质(度量)进行计算。用于区分不同物体内像素的性质(度量)包括平均灰度值,纹理,或颜色信息。因此,第一步是赋给每个区域一组参数,这些参数的值能够反映区域属于哪个物体。接下来,对相邻区域的所有边界进行考查,相邻区域的平均度量之间的差异是计算边界强度的一个尺度。如果给定边界两侧的度量差异明显,那么这个边界很强,反之则弱。强边界允许继续存在,而弱边界被消除,相邻区域被合并。

    示例代码

    1. I = imread('coins.png');%读取图像
    2. if isinteger(I)
    3. I = im2double(I);%将uint类型转换成double类型
    4. end
    5. figure,imshow(I);%显示原始图像
    6. [M,N] = size(I);%获取图像大小
    7. [y,x] = getpts;%选取种子点
    8. x1 = round(x);
    9. y1 = round(y);
    10. seed = I(x1,y1);
    11. J = zeros(M,N);
    12. J(x1,y1) = 1;
    13. sum = seed;
    14. suit = 1;
    15. count = 1;
    16. threshold = 0.15;
    17. while count>0
    18. s = 0;%记录判断一点周围八点时,符合条件的新点的灰度值之和
    19. count = 0;
    20. for i = 1:M
    21. for j = 1:N
    22. if J(i,j) == 1%判断此点是否为目标点,下面判断该点的领域点是否越界
    23. if(i-1)>0 & (i+1)<(M+1) & (j-1)>0 & (j+1)<(N+1)
    24. for u = -1:1%判断点周围八点是否符合生长规则
    25. for v = -1:1
    26. if J(i+u,j+v) == 0 & abs(I(i+u,j+v)-seed)<=threshold&1/(1+1/15*abs(I(i+u,j+v)-seed))>0.8%潘多符合尚未表姐,且满足条件的点
    27. (i+u, j+v) = 1;%将满足条件的点其在J中对应位置设置为白
    28. count = count+1;
    29. s = s+I(i+u,j+v);%此点的灰度值加入s中
    30. end
    31. end
    32. end
    33. end
    34. end
    35. end
    36. end
    37. suit = suit+count;%将count加入符合点数计数器中
    38. sum = sum+s;%将s加入符合点的灰度值总和中
    39. seed = sum/suit;%计算新的灰度平均值
    40. end
    41. figure,imshow(J);%显示区域生长结果图
    42. A = I.*J
    43. imshow(A)

    效果图片

  • 相关阅读:
    easyExcel使用场景
    Pytest参数详解 — 基于命令行模式
    WPF绘图(路径)
    对于产业互联网的认识,直接关系着我们究竟会以怎样的心态来看待它
    工业互联网系列白皮书(合集)
    SpringBoot配置文件的加载顺序
    ES6 入门教程 13 Symbol 13.4 实例:消除魔术字符串 & 13.5 属性名的遍历
    面试准备-中文面试问答(非技术)
    抖音上怎么挂小程序?制作小程序挂载抖音视频
    深入剖析红黑树:优雅地平衡二叉搜索树
  • 原文地址:https://blog.csdn.net/qq_20660115/article/details/132817258