java实现区域生长算法_matlab 区域生长算法生成二值图像边界区域
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 区域生长算法生成二值图像边界区域相关推荐
- matlab 区域生长算法生成二值图像边界区域
function ret=growseed() %=====区域生长算法======== %input :二值图像数据 %output:边界点二值图像数据 global I;global M; glo ...
- 《深入理解java虚拟机》笔记2——GC算法与内存分配策略
说起垃圾收集(Garbage Collection, GC),想必大家都不陌生,它是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如Sca ...
- java红包记录_微信红包算法(java)
package com.example.ant.common.tools; import java.util.LinkedList; import java.util.List; /** * 描述:红 ...
- php 实现的字典序排列算法,字典序的一个生成算法
字典序的一个生成算法. 最近在LeetCode刷题,刷到一个题,链接: https://leetcode-cn.com/problems/permutation-sequence/ 这个题要求得长度为 ...
- java8 streams_使用Java 8 Streams进行编程对算法性能的影响
java8 streams 多年来,使用Java进行多范式编程已经成为可能,它支持面向服务,面向对象和面向方面的编程的混合. 带有lambda和java.util.stream.Stream类的Jav ...
- 使用Java 8 Streams进行编程对算法性能的影响
多年来,使用Java进行多范例编程已经成为可能,它支持面向服务,面向对象和面向方面的编程的混合. 带有lambda和java.util.stream.Stream类的Java 8是个好消息,因为它使我 ...
- Java虚拟机(三)--------GC算法和收集器
如何判断对象可以被回收 堆中几乎放着所有的对象实例,对堆垃圾回收前的第一步就是要判断哪些对象已经死亡(即不能再被任何途径使用的 对象) 引用计数法 给对象添加一个引用计数器,每当有一个地方引用,计数器 ...
- ec java sm2证书_国密算法SM2证书制作
前段时间将系统的RSA算法全部升级为SM2国密算法,密码机和UKey硬件设备大都同时支持RSA和SM2算法,只是应用系统的加解密签名验证需要修改,这个更改底层调用的加密动态库来,原来RSA用的对称加密 ...
- Day595.普利姆算法 -数据结构和算法Java
普利姆算法 一.问题引出 二.最小生成树 三.普利姆算法介绍 四.图解分析 五.代码实现 package com.achang.algorithm;import java.util.Arrays;/* ...
最新文章
- 查看Linux进程状态
- Windows phone 应用开发[2]-数据缓存
- 【转】FireFox与IE js脚本差异 小结
- Linux 文件权限详解 含义和修改和安全
- akka应用_处理Akka应用程序中的每个事件
- 10分钟带你学会微信小程序的反编译
- 多级缓存设计详解 | 给数据库减负,刻不容缓!
- Nginx配置共用80端口|端口转发端口映射
- Atitit各种驱动的xdd tdd bdd设计 ATDD ddd v3 u66.docx Atitit各种驱动的xdd tdd bdd设计 ATDD ddd v2 s66 开发方法论与效率提
- linux 安装redies
- 大厂字节程序员薪资曝光:排行世界第五厉害了
- Http 常见的 Headers
- 其他——精灵 4 RTK常见问题
- 鸡兔同笼问题java解决
- WebStorm下载与安装
- C语言|博客作业09
- 频域串联滞后校正matlab,基于MATLAB的串联超前校正、滞后校正和串联滞后-超前校正设计.pdf...
- go 当前时间、时间戳和时间字符串及相互转换
- 企业为什么要大力推进OA办公?
- 《并行计算》期末总结
热门文章
- 如何破解excel密码
- python识别图片文字、并返回文字坐标_PyAutoGui 图片识别+定位+截图函数文档
- 【烈日炎炎战后端】Linux(0.3万字)
- 1.3寸oled(I2C)右屏幕出现一条竖线
- [语义分割]SPP、空洞卷积与ASPP总结
- linux: ubuntu 21.04 安装搜狗拼音输入法
- 【学习】手写数字生成
- JAVA 纯数字/金额数字转中文大写
- 关键业务服务器存在的“硬道理”
- uniapp 解决phoneX原生tabbar 安全区域问题