【于燕飞韩丽丽】边缘检测代码

im=imread(‘C:\Documents and Settings\Administrator\桌面\2.jpg‘);

Subplot(231);imshow(im);title(‘原始图像‘);

ii=rgb2gray(im); %ii=im2double(ii);

Subplot(232);imshow(ii);title(‘灰度图像‘);

hsv=rgb2hsv(im);

h=hsv(:,:,1); s=hsv(:,:,2); v=hsv(:,:,3);

%figure;imshow(h);title(‘h‘);

%figure;imshow(s);%title(‘s‘);

Subplot(233);imshow(v);title(‘强度v‘);

v=imnoise(v,‘salt & pepper‘,0.1);

Subplot(234),imshow(v);title(‘椒盐噪声‘);

v=~im2bw(v,0.75); %转为二值图像并取反

Subplot(235),imshow(v);title(‘二值取反‘);

%图像增强

[h,w]=size(v);

n=3;

f=double(v);

a=ones(n,n);

y=f;

for i=1:h-n+1

for j=1:w-n+1

a=f(i:i+(n-1),j:j+(n-1));

s=sum(sum(a));

y(i+(n-1)/2,j+(n-1)/2)=s/(n*n);

end

end

Subplot(236),imshow(v);title(‘二值取反并增强‘);

figure;

v = edge(v,‘canny‘,0.9);

Subplot(231),imshow(v);title(‘canny‘);

v = edge(v,‘sobel‘);

Subplot(232),imshow(v);title(‘sobel‘);

v = edge(v,‘prewitt‘);

Subplot(233),imshow(v);title(‘prewitt‘);

v = edge(v,‘log‘);

Subplot(234),imshow(v);title(‘log‘);

v = edge(v,‘roberts‘);

Subplot(235),imshow(v);title(‘roberts‘);

v=bwfill(v,‘holes‘);%填充内部空洞

Subplot(236),imshow(v);title(‘holes‘);



close all;clear;clc;
im=imread(‘C:\Documents and Settings\Administrator\桌面\2.jpg‘);
subplot(121);imshow(im);title(‘原始图像‘);
ii=rgb2gray(im);subplot(122);imshow(ii);title(‘灰度图像‘);

hsv=rgb2hsv(im);
h=hsv(:,:,1);
s=hsv(:,:,2);
v=hsv(:,:,3);
figure;
subplot(221);
imshow(h);title(‘色调h‘);
subplot(222);imshow(s);title(‘饱和度s‘);
subplot(223);imshow(v);title(‘强度v‘);

figure;
subplot(121);imshow(s);title(‘饱和度s‘);
subplot(122);imhist(s);title(‘直方图‘);

%开操作
se=strel(‘square‘,3);%使用5*5的结构元素对图像进行运算
open1=imopen(s,se);
close1=imclose(open1,se);

figure;
imshow(close1);title(‘开-闭1‘);

%孔洞填充
bw0=im2bw(close1);
figure;
subplot(221);imshow(bw0);title(‘bw0‘);
bw1=im2bw(bw0);
subplot(222);imshow(bw1);title(‘bw1‘);
bw2=im2bw(bw1);
subplot(223);imshow(bw2);title(‘bw2‘);
bw3=im2bw(bw2);
subplot(224);imshow(bw3);title(‘bw3‘);
bw4=im2double(bw3);

edi1 = edge(bw3, ‘roberts‘);
edi2 = edge(bw3, ‘sobel‘);
edi3 = edge(bw3, ‘prewitt‘);
edi4 = edge(bw3, ‘canny‘);%自动阀值选择法对图像进行canny算子检测,轮廓提取
figure;
subplot(221);imshow(edi1);title(‘roberts算子检测后的图像‘);
subplot(222);imshow(edi2);title(‘sobel算子检测后的图像‘);
subplot(223);imshow(edi3);title(‘prewitt算子检测后的图像‘);
subplot(224);imshow(edi4);title(‘canny算子检测后的图像‘);

%边缘检测
SFST=edge(bw3,‘sobel‘);
figure,imshow(SFST),title(‘Sobel滤波器(水平和垂直)‘);
figure;
s45=[-2 -1 0;-1 0 1; 0 1,2];
SFST45=imfilter(bw3,s45,‘replicate‘);
subplot(221);imshow(SFST45),title(‘Sobel滤波器(45度)‘);
sm45=[0 1 2;-1 0 1;-2 -1 0];
SFSTM45=imfilter(bw3,sm45,‘replicate‘);
subplot(222);imshow(SFSTM45),title(‘Sobel滤波器(-45度)‘);

ed01=or(SFST,SFST45);
subplot(223);imshow(ed01);title(‘SFST,SFST45融合‘);
ed02=or(ed01,SFSTM45);
subplot(224);imshow(ed02);title(‘ed01,SFSTM45‘);

s0=[-1 -2 -1;0 0 0;1 2 1];
s1=[-2 -1 0;-1 0 1;0 1 2];
s2=[-1 0 1;-2 0 2;-1 0 1];
s3=[0 1 2;-1 0 1;-2 -1 0];
s4=[0 1 2;-1 0 1;-2 -1 0];
s5=[0 1 2;-1 0 1;-2 -1 0];
s6=[1 0 -1;2 0 -2;1 0 -1];
s7=[0 -1 -2;1 0 -1;2 1 0];

figure;
a0=conv2(bw4,s0);subplot(221);imshow(a0);title(‘a0‘);
a1=conv2(bw4,s1);subplot(222);imshow(a1);title(‘a1‘);
a2=conv2(bw4,s2);subplot(223);imshow(a2);title(‘a2‘);
a3=conv2(bw4,s3);subplot(224);imshow(a3);title(‘a3‘);
figure;
a4=conv2(bw4,s4);subplot(221);imshow(a4);title(‘a4‘);
a5=conv2(bw4,s5);subplot(222);imshow(a5);title(‘a5‘);
a6=conv2(bw4,s6);subplot(223);imshow(a6);title(‘a6‘);
a7=conv2(bw4,s7);subplot(224);imshow(a7);title(‘a7‘);

%边缘融合
figure;
a01=or(a0,a1);subplot(221);imshow(a01);title(‘a0与a1融合‘);
a23=or(a2,a3);subplot(222);imshow(a23);title(‘a2与a3融合‘);
a45=or(a4,a5);subplot(223);imshow(a45);title(‘a4与a5融合‘);
a67=or(a6,a7);subplot(224);imshow(a67);title(‘a6与a7融合‘);
figure;
b0=or(a01,a23);subplot(221);imshow(b0);title(‘a01与a23融合‘);
b1=or(a45,a67);subplot(222);imshow(b1);title(‘a45与a67融合‘);
b01=or(b0,b1);subplot(223);imshow(b01);title(‘b0与b1融合‘);

[row col] = size(bw3);
count = 0;
arr = zeros(row*col,1);
visit= zeros(size(bw3));

% 调用计算连通域函数进行数PM2.5颗粒和计算PM2.5颗粒的面积
for i = 1:row
for j = 1:col
if bw3(i,j)&&visit(i,j) == 0%寻找到白点
count = count +1;%计数加一 ,给白色像素赋值为颗粒的标号
p = [i; j]; %记住该点
[c ,domain] = finddomain(bw3, p);%调用函数返回domain连通域内有c个像素(面积)
arr(count) = c;%将各个颗粒的面积存入arr数组中
for m = 1:c
visit(domain(1,m), domain(2, m)) = 1;%标记已入队的白色像素的8连通域内的像素点已访问
end
end
end
end
disp(‘显微图像中颗粒的总数为:‘);
disp(count);
%disp(‘显微图像中颗粒的面积(像素)为:‘);
%disp(arr(1:count));
pi=3.1415926;
l=0;
arry=zeros(500,1);
arrys=zeros(500,1);
for k=1:count
r=sqrt(arr(k)/pi);
r=2*r;
r=r/3.015;
if r<=2.5
l=l+1;
arry(l)=r;
arrys(l)=arr(k);
end
end
disp(‘大气PM2.5颗粒数目为:‘);
disp(l);
%disp(‘大气PM2.5颗粒粒径为:‘);
%disp(arry(1:l));
%disp(‘大气PM2.5颗粒大小为:‘);
%disp(arrys(1:l));

时间: 2024-11-04 09:25:49

【于燕飞韩丽丽】边缘检测代码的相关文章

华丽丽的在线代码高亮组件CodeMirror

偷懒为码农天性之一:能一蹴而就的决不愚公移山,能一劳永逸的决不孜孜不倦!其中一个代码实例就是 动态配置,将不同的场景抽象成通用逻辑加配置,这样就可以"一处代码供全球,不做代码搬运工",更有甚者是把特殊的代码也变成是动态加载(比如用Groovy, Clojure去做动态加载).当配置动态代码时,总得把代码上传到服务器,如果代码是通过贴到上传页面的话,Textarea里的代码可没有IDE下那么婀娜多姿,要想好看就得想办法!在线代码高亮组件 正在灯火阑珊处.... 在线代码高亮组件有很多,特

201871010123-吴丽丽《面向对象程序设计(Java)》第一周学习总结

                                                                        201871010123-吴丽丽<面向对象程序设计(Java)>第一周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业要求在哪里  https://www.cnblogs.com/nwnu-daizh/p/11435127.html 作业要求目标 1.了解课程上课方式及老师教学

201871010123-吴丽丽 《面向对象程序设计(Java)》第八周学习总结

201871010123-吴丽丽<面向对象程序设计(Java)>第八周学习总结 项目 内容   这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/   这个作业要求在哪里  https://www.cnblogs.com/nwnu-daizh/p/11703678.html 作业的学习目标  掌握接口定义方法: 掌握实现接口类的定义要求: 掌握实现了接口类的使用要求: 理解程序回调设计模式: 掌握Comparator接口用法: 掌握对象浅层拷贝与深层拷贝

根文件系统袁丽丽

1.1.根文件系统概述 1.为什么需要根文件系统 (1)init进程的应用程序在根文件系统上 (2)根文件系统提供了根目录/ (3)内核启动后的应用层配置(etc目录)在根文件系统上 (4)shell命令程序在根文件系统上 总结:一套Linux体系,只有内核本身是不能工作,必须要根文件系统相配合,主要是要根文件系统/etc下的配置文件./bin./sbin等目录下的shell命令相配合等等,还有/lib下的库文件(静态链接库,动态链接库)等等 1.2.根文件系统的实质 (1).根文件系统是特殊用

201871010123-吴丽丽《面向对象程序设计(java)》第二周学习总结

                        项目                这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/              这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11475377.html              作业学习目标 学习并掌握Java Application程序结构: 学习并掌握Java语言的数据类型与变量: 学会使用Java运算符构造各类表达式

吴丽丽-201871010123《面向对象程序设计(Java)》第七周学习总结

项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11654436.html 作业的学习目标 (1) 掌握四种访问权限修饰符的使用特点: (2) 掌握Object类的用途及常用API: (3) 掌握ArrayList类的定义方法及用法: (4)掌握枚举类定义方法及用途: (5)结合本章实验内容,理解继承与多态性两个面向对象程序设计特征,并体会其优点

201871010123-吴丽丽 《面向对象程序设计(Java)》第十周学习总结

项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11778090.html 作业的学习目标 1.掌握java异常处理技术: 2.了解断言的用法: 3.了解日志的用途: 4.掌握程序基础调试技巧. 第一部分:第七章理论知识 一.异常 (1)   异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行. (2)异常处理的任务就是将控制权从错误

201871010123-吴丽丽 《面向对象程序设计(Java)》课程学习总结

1.统计在课程学习中,你学习了多少个程序案例,合计有多少行代码? 答:在本次学习中大致学习了40个程序案例,合计有9500行代码. 2.统计在课程学习中,你编写了多少个程序,合计多少行代码? 答:在本次课程学习中大致编写了20个程序,合计2300行程序. 3.你的15次课程作业分别花了你多少时间,平均作业时间是多少?(做一个列表) 课程作业 时间 第一次作业 6h 第二次作业 8h 第三次作业 10h 第四次作业 12h 第五次作业 9h 第六次作业 8h 第七次作业 7h 第八次作业 7h 第

组队打代码 !!! ——Alpha项目冲刺

Alpha阶段 - 博客链接合集 队伍名称: 代码那些事儿 学号 姓名 211606320 刘佳 211606313 李佳 211606303 陈水莲 211606302 曾丽丽 211606338 许燕婷 211606348 周世元 211606341 杨小妮 211606378 王浩 项目Github地址 敏捷冲刺日志 测试报告 用户反馈 展示博客 事后诸葛亮 原文地址:https://www.cnblogs.com/LJ-D/p/10057836.html