b2c信息网

您现在的位置是:首页 > 热点问题 > 正文

热点问题

python分水岭算法源码(分水岭算法代码)

hacker2022-06-14 13:15:25热点问题65
本文目录一览:1、帮帮我我不知道分水岭算法在图像分割中的应用……代码,还有别的帮帮我

本文目录一览:

帮帮我 我不知道分水岭算法在图像分割中的应用…… 代码,还有别的帮帮我

clear,clc

%三种方法进行分水岭分割

%读入图像

filename='sar1.bmp';

f=imread(filename);

Info=imfinfo(filename);

if Info.BitDepth8

f=rgb2gray(f);

end

figure,mesh(double(f));%显示图像,类似集水盆地

%方法1:一般分水岭分割,从结果可以看出存在过分割问题

b=im2bw(f,graythresh(f));%二值化,注意应保证集水盆地的值较低(为0),否则就要对b取反

d=bwdist(b); %求零值到最近非零值的距离,即集水盆地到分水岭的距离

l=watershed(-d); %matlab自带分水岭算法,l中的零值即为风水岭

w=l==0; %取出边缘

g=b~w; %用w作为mask从二值图像中取值

figure

subplot(2,3,1),imshow(f);

subplot(2,3,2),imshow(b);

subplot(2,3,3),imshow(d);

subplot(2,3,4),imshow(l);

subplot(2,3,5),imshow(w);

subplot(2,3,6),imshow(g);

%方法2:使用梯度的两次分水岭分割,从结果可以看出还存在过分割问题(在方法1的基础上改进)

h=fspecial('sobel');%获得纵方向的sobel算子

fd=double(f);

g=sqrt(imfilter(fd,h,'replicate').^2+imfilter(fd,h','replicate').^2);%使用sobel算子进行梯度运算

l=watershed(g);%分水岭运算

wr=l==0;

g2=imclose(imopen(g,ones(3,3)),ones(3,3));%进行开闭运算对图像进行平滑

l2=watershed(g2);%再次进行分水岭运算

wr2=l2==0;

f2=f;

f2(wr2)=255;

figure

subplot(2,3,1),imshow(f);

subplot(2,3,2),imshow(g);

subplot(2,3,3),imshow(l);

subplot(2,3,4),imshow(g2);

subplot(2,3,5),imshow(l2);

subplot(2,3,6),imshow(f2);

%方法3:使用梯度加掩模的三次分水岭算法(在方法2的基础上改进)

h=fspecial('sobel');%获得纵方向的sobel算子

fd=double(f);

g=sqrt(imfilter(fd,h,'replicate').^2+imfilter(fd,h','replicate').^2);%使用sobel算子进行梯度运算

l=watershed(g);%分水岭运算

wr=l==0;

rm=imregionalmin(g); %计算图像的区域最小值定位,该函数仅仅是用来观察为何分水岭算法产生这么多集水盆地

im=imextendedmin(f,2);%上面仅是产生最小值点,而该函数则是得到最小值附近的区域,此处的附近是相差2的区域

fim=f;

fim(im)=175; %将im在原图上标识出,用以观察

lim=watershed(bwdist(im));%再次分水岭计算

em=lim==0;

g2=imimposemin(g,im|em);%在梯度图上标出im和em,im是集水盆地的中心,em是分水岭

l2=watershed(g2); %第三次分水岭计算

f2=f;

f2(l2==0)=255; %从原图对分水岭进行观察

figure

subplot(3,3,1),imshow(f);

subplot(3,3,2),imshow(g);

subplot(3,3,3),imshow(l);

subplot(3,3,4),imshow(im);

subplot(3,3,5),imshow(fim);

subplot(3,3,6),imshow(lim);

subplot(3,3,7),imshow(g2);

subplot(3,3,8),imshow(l2)

subplot(3,3,9),imshow(f2);

matlab 标记分水岭算法源码

作者写的非常详细。

% 数字图像处理程序作业

% 本程序能将JPG格式的彩色图像文件灰度化并进行直方图均衡

%

% 输入文件:PicSample.jpg 待处理图像

% 输出文件:PicSampleGray.bmp 灰度化后图像

% PicEqual.bmp 均衡化后图像

%

% 输出图形窗口说明

% figure NO 1 待处理彩色图像

% figure NO 2 灰度化后图像

% figure NO 3 直方图

% figure NO 4 均衡化后直方图

% figure NO 5 灰度变化曲线

% figure NO 6 均衡化后图像

% 1, 处理的图片名字要为 PicSample.jpg

% 2, 程序每次运行时会先清空workspace

% 作者;archiless lorder

clear all

%一,图像的预处理,读入彩色图像将其灰度化

PS=imread('PicSample.jpg'); %读入JPG彩色图像文件

imshow(PS) %显示出来 figure NO 1

title('输入的彩色JPG图像')

imwrite(rgb2gray(PS),'PicSampleGray.bmp'); %将彩色图片灰度化并保存

PS=rgb2gray(PS); %灰度化后的数据存入数组

figure,imshow(PS) %显示灰度化后的图像,也是均衡化前的样品 figure NO 2

title('灰度化后的图像')

%二,绘制直方图

[m,n]=size(PS); %测量图像尺寸参数

GP=zeros(1,256); %预创建存放灰度出现概率的向量

for k=0:255

GP(k+1)=length(find(PS==k))/(m*n); %计算每级灰度出现的概率,将其存入GP中相应位置

end

figure,bar(0:255,GP,'g') %绘制直方图 figure NO 3

title('原图像直方图')

xlabel('灰度值')

ylabel('出现概率')

%三,直方图均衡化

S1=zeros(1,256);

for i=1:256

for j=1:i

S1(i)=GP(j)+S1(i); %计算Sk

end

end

S2=round(S1*256); %将Sk归到相近级的灰度

for i=1:256

GPeq(i)=sum(GP(find(S2==i))); %计算现有每个灰度级出现的概率

end

figure,bar(0:255,GPeq,'b') %显示均衡化后的直方图 figure NO 4

title('均衡化后的直方图')

xlabel('灰度值')

ylabel('出现概率')

figure,plot(0:255,S2,'r') %显示灰度变化曲线 figure NO 5

legend('灰度变化曲线')

xlabel('原图像灰度级')

ylabel('均衡化后灰度级')

%四,图像均衡化

PA=PS;

for i=0:255

PA(find(PS==i))=S2(i+1); %将各个像素归一化后的灰度值赋给这个像素

end

figure,imshow(PA) %显示均衡化后的图像 figure NO 6

title('均衡化后图像')

imwrite(PA,'PicEqual.bmp');

求!!用分水岭算法图像分割的matlab仿真的程序

能否也给我发一份分水岭源代码,最近我也在找这方面的程序,自己写不出来。不胜感激tongtiaohaoa@126.com

MATLAB 图像分割的 分水岭算法 的源代码,麻烦有的人发一份给我,谢谢

直方图均衡化也是非线性量化的一种吧,网上找到的,作者写的非常详细。

% 数字图像处理程序作业

% 本程序能将JPG格式的彩色图像文件灰度化并进行直方图均衡

%

% 输入文件:PicSample.jpg 待处理图像

% 输出文件:PicSampleGray.bmp 灰度化后图像

% PicEqual.bmp 均衡化后图像

%

% 输出图形窗口说明

% figure NO 1 待处理彩色图像

% figure NO 2 灰度化后图像

% figure NO 3 直方图

% figure NO 4 均衡化后直方图

% figure NO 5 灰度变化曲线

% figure NO 6 均衡化后图像

% 1, 处理的图片名字要为 PicSample.jpg

% 2, 程序每次运行时会先清空workspace

% 作者;archiless lorder

clear all

%一,图像的预处理,读入彩色图像将其灰度化

PS=imread('PicSample.jpg'); %读入JPG彩色图像文件

imshow(PS) %显示出来 figure NO 1

title('输入的彩色JPG图像')

imwrite(rgb2gray(PS),'PicSampleGray.bmp'); %将彩色图片灰度化并保存

PS=rgb2gray(PS); %灰度化后的数据存入数组

figure,imshow(PS) %显示灰度化后的图像,也是均衡化前的样品 figure NO 2

title('灰度化后的图像')

%二,绘制直方图

[m,n]=size(PS); %测量图像尺寸参数

GP=zeros(1,256); %预创建存放灰度出现概率的向量

for k=0:255

GP(k+1)=length(find(PS==k))/(m*n); %计算每级灰度出现的概率,将其存入GP中相应位置

end

figure,bar(0:255,GP,'g') %绘制直方图 figure NO 3

title('原图像直方图')

xlabel('灰度值')

ylabel('出现概率')

%三,直方图均衡化

S1=zeros(1,256);

for i=1:256

for j=1:i

S1(i)=GP(j)+S1(i); %计算Sk

end

end

S2=round(S1*256); %将Sk归到相近级的灰度

for i=1:256

GPeq(i)=sum(GP(find(S2==i))); %计算现有每个灰度级出现的概率

end

figure,bar(0:255,GPeq,'b') %显示均衡化后的直方图 figure NO 4

title('均衡化后的直方图')

xlabel('灰度值')

ylabel('出现概率')

figure,plot(0:255,S2,'r') %显示灰度变化曲线 figure NO 5

legend('灰度变化曲线')

xlabel('原图像灰度级')

ylabel('均衡化后灰度级')

%四,图像均衡化

PA=PS;

for i=0:255

PA(find(PS==i))=S2(i+1); %将各个像素归一化后的灰度值赋给这个像素

end

figure,imshow(PA) %显示均衡化后的图像 figure NO 6

title('均衡化后图像')

imwrite(PA,'PicEqual.bmp');

求经典MATLAB分水岭算法源代码

%%都不知道你是啥样的分割 什么图片

clear, close all;

clc;

PathName='d:\';%t为自填内容,下面p类似

FileName=[PathName 'test.jpg'];

Image=imread(FileName);

subplot(2,2,1);subimage(Image);title('原图');;pixval on;

B=[1,1,1;1,1,1;1,1,1];%方形结构元

E8=[-1,0;-1,1;0,1;1,1;1,0;1,-1;0,-1;-1,-1]; % 8-连通结构元坐标

maskLenth=length(E8); % 结构元点的个数

[X,Y]=size(Image);

%原始图像image 赋值给A1

n=1;

A(:,:,n)=Image;

M=zeros(X,Y);

Mark_Image=zeros(X,Y);

%产生距离图

while sum(sum(A(:,:,n)))~=0

A(:,:,n+1)= imerode(A(:,:,n),B);

U(:,:,n)= (A(:,:,n)-A(:,:,n+1))*n;

M=M+U(:,:,n);

n=n+1;

end

n=n-1;

subplot(2,2,2);imagesc(M,[0,n]);title('距离图');

% 搜寻局部最大值,将其放入Deal_Image

Deal_Image=zeros(X,Y);

while n0

for high=1:X

for width=1:Y

%********************************************************************

Mark_Bool=0;

if M(high,width)==n

%______________________________________________________________

for dot=1:maskLenth

i=E8(dot,1); j=E8(dot,2);

if high+i=1 width+j=1 high+i=X width+j=Y M(high+i,width+j)M(high,width);

Mark_Bool=1;break;

end % if_end

end % for dot_end

%______________________________________________________________

if Mark_Bool==0;

Deal_Image(high,width)=M(high,width);

end %if end

%______________________________________________________________

end %if end

%********************************************************************

end %for-end

end %for-end

n=n-1;

end % while n=0 end

Deal_Image =[Deal_Image=1]

subplot(2,2,3);subimage(Deal_Image);title('输出图像');

Mark_Number=1;

while n0

for high=1:X

for width=1:Y

Mark_Bool=0;

%********************************************************************

if M(high,width)==n

%______________________________________________________________

for dot=1:maskLenth

i=E8(dot,1); j=E8(dot,2);

if high+i=1 width+j=1 high+i=X width+j=Y Mark_Image(high+i,width+j)0;

Mark_Image(high,width)=Mark_Image(high+i,width+j);

Mark_Bool=1;break;

end % if_end

end % for dot_end

%______________________________________________________________

if Mark_Bool==0;

Mark_Image(high,width)=Mark_Number;

Mark_Number=Mark_Number+1;

end %if end

%______________________________________________________________

pause;

subplot(2,2,2);imagesc(Mark_Image,[0,Mark_Number]);title('输出图像');

end %if end

%********************************************************************

end %for-end

end %for-end

n=n-1;

end % while n=0 end

subplot(2,2,3);imagesc(Mark_Image,[0,Mark_Number]);title('分割后的图像');

uicontrol('Style','edit','string',['分割出区域:',Num2str(Mark_Number-1),'个'],...

'Position', [400 0 150 18],'FontSize',12,'FontWeight','light');

Python 有哪些入门学习方法和值得推荐的经典教材?

如果你有一定的计算机编程知识基础,那么很容易学;再如果你对编程十分感兴趣,那么很容易学的。

1,找到合适的入门书籍,大致读一次,循环啊判断啊,常用类啊,搞懂(太难的跳过)

2,做些简单习题,字符串比较,读取日期之类 Python Cookbook不错(太难太无趣的,再次跳过,保持兴趣是最重要的,不会的以后可以再学)

3,加入Python讨论群,态度友好笑眯眯(很重要,这样高手才会耐心纠正你错误常识)。很多小问题,纠结许久,对方一句话点播思路,真的节约你很多时间。耐心指教我的好人,超级超级多谢。

4,解决自己电脑问题。比如下载美剧,零散下载了2,4,5,8集,而美剧共12集,怎样找出漏下的那几集?然后问题分解,1读取全部下载文件名,2提取集的数字,3数字排序和(1--12)对比,找出漏下的。

5,时刻记住目的,不是为了当程序员,是为了解决问题。比如,想偷懒抓网页内容,用urllib不行,用request也不行,才发现抓取内容涉及那么多方面(cookie,header,SSL,url,javascript等等),当然可以听人家劝,回去好好读书,从头读。 或者,不求效率,只求解决,用ie打开网页再另存为行不行?ie已经渲染过全部结果了。 问题变成:1--打开指定的10个网页(一行代码就行)。更复杂的想保存呢?利用已经存在的包,比如PAM30(我的是Python3),直接打开ie,用函数outHTML另存为文本,再用搜索函数(str搜索也行,re正则也行)找到数据。简单吧?而且代码超级短。

6,保持兴趣,用最简单的方式解决问题,什么底层驱动,各种交换,留给大牛去写吧。我们利用已经有的包完成。

7,耐心读文档,并且练习快速读文档。拿到新包,找到自己所需要的函数,是需要快速读一次的。这个不难,读函数名,大概能猜到是干嘛的,然后看看返回值,能判断是不是自己需要的。

8,写帮助文件和学习笔记,并发布共享。教别人的时候,其实你已经自己再次思考一次了。 我觉得学程序就像学英文,把高频率的词(循环,判断,常用包,常用函数)搞懂,就能拼装成自己想要的软件。 一定要保持兴趣,太复杂的跳过,就像小学数学,小学英语,都是由简入深。 网络很平面,无数国际大牛著作好书,关于Python,算法,电脑,网络,或者程序员思路,或者商业思维(浪潮之巅是本好书)等等,还有国际名校的网络公开课(中英文字幕翻译完毕,观看不是难事),讲计算机,网络,安全,或者安卓系统,什么都有,只要能持续保持兴趣,一点点学习下去,不是难事。 所有天才程序员,都曾是儿童,回到儿童思维来理解和学习。觉得什么有趣,先学,不懂的,先放着,遇到问题再来学,效果更好。 唯一建议是,不要太贪心,耐心学好一门优雅的语言,再学其它。虽然Javascript做特效很炫,或提某问题时,有大牛建议,用Ruby来写更好之类,不要改方向。就像老笑话:“要学习递归,必须首先理解递归。”然后死循环一直下去。坚持学好一门语言,再研究其他。 即使一门语言,跟网络,数据库等等相关的部分,若都能学好,再学其他语言,是很快的事情。 另外就是,用学英文的耐心来学计算机,英文遇到不懂的词,抄下,查询。 python里,看到Http,查查定义,看到outHtml,查查定义,跟初学英语时候一样,不要直接猜意思,因为精确描述性定义,跟含糊自然语有区别的。而新人瞎猜,很容易错误理解,wiki,google很有用。

对于python初学者来说,能找到一个好老师学习格外重要,这能决定你是不是可以做出好的项目,在python开发的路上越走越轻松,如果现在的你缺乏学习经验,找不到老师指导你学习,可以加企 鹅扣-Q前面112再加上中间的983以及最后四位数4903,连在一起就可以了。

如果说汇编是第一代编程语言,那么C和C++是第二代编程语言,C#和Java等等是第三代编程语言,Python和其他类似的脚本语言就是第四代编程语言(除汇编外这些语言都是C语系下的编程语言,可以进行类比),从C++开始是个分水岭,它是通过面向对象和对底层技术的封装,使编程向高级编程过度,到Python已经是很简历通俗了,至少是跟之前比,所以如果说python不易学,那其他语言怎么办呢,几乎每本python的教材都会先表明python是一门易学易用的语言,这也是这个语言被创造出来的宗旨之一,另外Google的程序猿很喜欢用Python编写各类工具,因为它的语言简历,编码效率高,让用惯了其他语言的人,乐意去用这门新的语言,也说明它的易学性。

另外从广义讲,Python不仅是一门编程语言,还是一个编程的平台,在这个平台下,有着安装各种扩展、框架的工具pip,有着打包工具setuptools等等等等,这些工具已经很成熟,而且易于上手,另外Python有很多很好的编程工具(集成开发环境)可以用,如PyCharm等,这也使的新人很容易上手,不像其他不成熟的编程语言工具贫乏,编写和运行程序如连电路板一般。

发表评论

评论列表

  • 寻妄苍阶(2022-06-14 15:59:36)回复取消回复

    im);subplot(3,3,5),imshow(fim);subplot(3,3,6),imshow(lim);subplot(3,3,7),imshow(g2);subplot(

  • 假欢旧竹(2022-06-14 19:42:11)回复取消回复

    er(fd,h','replicate').^2);%使用sobel算子进行梯度运算l=watershed(g);%分水岭运算wr=l==0; rm=imregionalmin(g); %计算图像的区域最小值定位

  • 离鸢未芩(2022-06-14 23:54:50)回复取消回复

    % 结构元点的个数[X,Y]=size(Image);%原始图像image 赋值给A1n=1;A(:,:,n)=Image;M=zeros(X,Y);Mark_Image=zeros(

  • 竹祭酒废(2022-06-14 19:17:08)回复取消回复

    lc%三种方法进行分水岭分割%读入图像filename='sar1.bmp';f=imread(filename);Info=imfinfo(filename);if Info.BitDepth8 f=rgb2g