function ret=growseed()

%=====区域生长算法========

%input :二值图像数据

%output:边界点二值图像数据

global I;global M;

global N;global Y;global T;global newy;global newx;%==边界点x,y坐标

%获取多张图片的二值数据

tempI=draw(); %tempI 36*45*numbertotal

count=length(tempI(1,1,:));

wide=length(tempI(:,1,1));%36

high=length(tempI(1,:,1));%45

result=zeros(wide,high,count);

for k=1:count

I=tempI(:,:,k);

% figure,imshow(I),title('原始图像')

I=double(I);

[M,N]=size(I);

[seedx,seedy]=searchseed(I);

Y=zeros(M,N); %作一个全零与原图像等大的图像矩阵Y,作为输出图像矩阵

T=zeros(M,N);%标记点。。。

newx=0;newy=0;

calseed(seedx,seedy);

figure,imshow(Y);

% if k>1&&k

% result(:,:,k)=Y;

% figure,imshow(Y);

% else

% result(:,:,k)=T;

% % imshow(T);

% % figure,imshow(T);

% end

end

ret=result;

end

function calseed(seedx,seedy)

global M;

global N;

global Y;

global I;

global newx;

global newy;

global T;

for i = -1 : 1

for j = -1 : 1

newseedx = seedx + i;

newseedy = seedy+ j;

%生长准则:判断生长点8邻域内像素的各自灰度值是否与生长点所在像素灰度值相等

if newseedx> 0 && newseedx <= M && newseedy > 0 && newseedy <= N &&T(newseedx,newseedy)==0&&I(newseedx,newseedy)==1

T(newseedx,newseedy)=1;

if isequal(newseedx,newseedy)==1

calseed(newseedx,newseedy);

else

Y(newx,newy)=1;%set边界点值为1

end

end

end

end

end

function ret=isequal(x,y)%====判断点的领域是否相等

%===输入1个点的x,y坐标

%==返回1 相等

global I;

global newx;

global newy;

global M;

global N;

ret=1;

tag=0;

for i = -1 : 1

if tag==0

for j = -1 : 1

if x+i> 0 && x+i <= M && y+j > 0 && y+j <= N

if I( x+i,y+j)==0

ret=0;

tag=1;

newx=x+i;

newy=y+j;

end

end

end

end

end

end

function [x,y]=searchseed(I)

%=========寻找种子点=====

%Input:一张二值数据的图片

%Output:返回种子点的x,y坐标

%======求数据为1的质心====

[M,N]=size(I);

corx=0;

cory=0;

count=0;

for i=1:M

for j=1:N

if I(i,j)==1

corx=corx+i;

cory=cory+j;

count=count+1;

end

end

end

x=round(corx/count);

y=round(cory/count);

end

处理结果

java实现区域生长算法_matlab 区域生长算法生成二值图像边界区域相关推荐

  1. matlab 区域生长算法生成二值图像边界区域

    function ret=growseed() %=====区域生长算法======== %input :二值图像数据 %output:边界点二值图像数据 global I;global M; glo ...

  2. 《深入理解java虚拟机》笔记2——GC算法与内存分配策略

    说起垃圾收集(Garbage Collection, GC),想必大家都不陌生,它是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如Sca ...

  3. java红包记录_微信红包算法(java)

    package com.example.ant.common.tools; import java.util.LinkedList; import java.util.List; /** * 描述:红 ...

  4. php 实现的字典序排列算法,字典序的一个生成算法

    字典序的一个生成算法. 最近在LeetCode刷题,刷到一个题,链接: https://leetcode-cn.com/problems/permutation-sequence/ 这个题要求得长度为 ...

  5. java8 streams_使用Java 8 Streams进行编程对算法性能的影响

    java8 streams 多年来,使用Java进行多范式编程已经成为可能,它支持面向服务,面向对象和面向方面的编程的混合. 带有lambda和java.util.stream.Stream类的Jav ...

  6. 使用Java 8 Streams进行编程对算法性能的影响

    多年来,使用Java进行多范例编程已经成为可能,它支持面向服务,面向对象和面向方面的编程的混合. 带有lambda和java.util.stream.Stream类的Java 8是个好消息,因为它使我 ...

  7. Java虚拟机(三)--------GC算法和收集器

    如何判断对象可以被回收 堆中几乎放着所有的对象实例,对堆垃圾回收前的第一步就是要判断哪些对象已经死亡(即不能再被任何途径使用的 对象) 引用计数法 给对象添加一个引用计数器,每当有一个地方引用,计数器 ...

  8. ec java sm2证书_国密算法SM2证书制作

    前段时间将系统的RSA算法全部升级为SM2国密算法,密码机和UKey硬件设备大都同时支持RSA和SM2算法,只是应用系统的加解密签名验证需要修改,这个更改底层调用的加密动态库来,原来RSA用的对称加密 ...

  9. Day595.普利姆算法 -数据结构和算法Java

    普利姆算法 一.问题引出 二.最小生成树 三.普利姆算法介绍 四.图解分析 五.代码实现 package com.achang.algorithm;import java.util.Arrays;/* ...

最新文章

  1. 查看Linux进程状态
  2. Windows phone 应用开发[2]-数据缓存
  3. 【转】FireFox与IE js脚本差异 小结
  4. Linux 文件权限详解 含义和修改和安全
  5. akka应用_处理Akka应用程序中的每个事件
  6. 10分钟带你学会微信小程序的反编译
  7. 多级缓存设计详解 | 给数据库减负,刻不容缓!
  8. Nginx配置共用80端口|端口转发端口映射
  9. Atitit各种驱动的xdd tdd bdd设计 ATDD ddd v3 u66.docx Atitit各种驱动的xdd tdd bdd设计 ATDD ddd v2 s66 开发方法论与效率提
  10. linux 安装redies
  11. 大厂字节程序员薪资曝光:排行世界第五厉害了
  12. Http 常见的 Headers
  13. 其他——精灵 4 RTK常见问题
  14. 鸡兔同笼问题java解决
  15. WebStorm下载与安装
  16. C语言|博客作业09
  17. 频域串联滞后校正matlab,基于MATLAB的串联超前校正、滞后校正和串联滞后-超前校正设计.pdf...
  18. go 当前时间、时间戳和时间字符串及相互转换
  19. 企业为什么要大力推进OA办公?
  20. 《并行计算》期末总结

热门文章

  1. 如何破解excel密码
  2. python识别图片文字、并返回文字坐标_PyAutoGui 图片识别+定位+截图函数文档
  3. 【烈日炎炎战后端】Linux(0.3万字)
  4. 1.3寸oled(I2C)右屏幕出现一条竖线
  5. [语义分割]SPP、空洞卷积与ASPP总结
  6. linux: ubuntu 21.04 安装搜狗拼音输入法
  7. 【学习】手写数字生成
  8. JAVA 纯数字/金额数字转中文大写
  9. 关键业务服务器存在的“硬道理”
  10. uniapp 解决phoneX原生tabbar 安全区域问题