Matlab实现图像分割

本文涉及的产品
视觉智能开放平台,图像通用资源包5000点
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,视频通用资源包5000点
简介: Matlab实现图像分割
文章和代码以及样例图片等相关资源,已经归档至【Github仓库: digital-image-processing-matlab】或者公众号【AIShareLab】回复 数字图像处理 也可获取。

目的

  1. 掌握线检测
  2. 边缘检测
  3. 使用梯度的分水岭分割
  4. 控制标记符的分水岭分割

内容

线检测

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function B=pixeldup(A, m, n)


if nargin<2;
    error('At least two inputs are required');
end
if nargin==2;
    n=m;
end
u=1:size(A,1);
m=round(m);
u=u(ones(1,m), :);
u=u(:);



v = 1:size(A,1);
n=round(n);
v=v(ones(1,n), :);
v=v(:);
B=A(u,v);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
clc
f=imread('D:\pic\DIP3E_CH10\Fig1005(a)(wirebond_mask).tif');
figure,imshow(f);

w=[2 -1 -1;-1 2 -1;-1 -1 2];
g=imfilter(double(f),w);
figure,imshow(g,[])%fig 2

gtop=g(1:120,1:120);
gtop=pixeldup(gtop, 4);
figure,imshow(gtop,[])%fig 3

gbot=g(end-119:end,end-119:end);
gbot=pixeldup(gbot,4);
figure,imshow(gbot,[])%fig 4

g=abs(g);
figure,imshow(g,[])%fig 5

T=max(g(:));
g=g>=T;
figure,imshow(g)%fig 6
%%%%%%%%%%%%%%%%%%%%%%%%

边缘检测

%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
clc
f=imread('D:\pic\DIP3E_CH10\Fig1016(a)(building_original).tif');
figure,imshow(f);
[gv,t]=edge(f,'sobel','vertical');
figure,imshow(gv);
t

gv=edge(f,'sobel',0.15,'vertical');
figure,imshow(gv);
gboth=edge(f,'sobel',0.15);
figure,imshow(gboth);
w45=[-2 -1 0;-1 0 1;0 1 2]
g45=imfilter(double(f),w45,'replicate');
T=0.3*max(abs(g45(:)));
g45=g45>=T;
figure,imshow(g45);
%%%%%%%%%%%%%%%%%%%%%%%%
%Sobel,LoG 和Canny 边缘检测器的比较

clear all
clc
f=imread('D:\pic\DIP3E_CH10\Fig1016(a)(building_original).tif');
figure,imshow(f);

[g_sobel_default,ts]=edge(f,'sobel');
figure,imshow(g_sobel_default);
[g_log_default,tlog]=edge(f,'log');
figure,imshow(g_log_default);
[g_canny_default,tc]=edge(f,'canny');
figure,imshow(g_canny_default);

[g_sobel_best,ts]=edge(f,'sobel',0.05);
figure,imshow(g_sobel_best);
[g_log_best,tlog]=edge(f,'log',0.003,2.25);
figure,imshow(g_log_best);
[g_canny_best,tc]=edge(f,'canny',[0.04 0.10],1.5);
figure,imshow(g_canny_best);

使用梯度的分水岭分割

clear all
clc
f=imread('D:\pic\DIP3E_CH10\Fig1057(a)(small_blobs-original).tif');
figure,imshow(f);

h=fspecial('sobel');
fd=double(f);
g=sqrt(imfilter(fd,h,'replicate').^2+...
    imfilter(fd,h','replicate').^2);
figure,imshow(g);

L=watershed(g);
figure,imshow(L);
wr=L==0;

g2=imclose(imopen(g,ones(3,3)),ones(3,3));
figure,imshow(g2);
L2=watershed(g2);
figure,imshow(L2);
wr2=L2==0;
f2=f;
f2(wr2)=255;
figure,imshow(f2);

控制标记符的分水岭分割

%%%%%%%%%%%%%%%%理解每幅图像的含义%%%%%%%%%%%
clear all
clc
f=imread('D:\pic\DIP3E_CH10\Fig1057(a)(small_blobs-original).tif');
figure,imshow(f);

h=fspecial('sobel');
fd=double(f);
g=sqrt(imfilter(fd,h,'replicate').^2+...
imfilter(fd,h','replicate').^2);
L=watershed(g);
wr=L==0;

rm=imregionalmin(g);
figure,imshow(rm);
im=imextendedmin(f,2);
figure,imshow(im);
fim=f;
fim(im)=175;
figure,imshow(fim);

Lim=watershed(bwdist(im));
figure,imshow(Lim);
em=Lim==0;

g2=imimposemin(g,im|em);
figure,imshow(g2);

L2=watershed(g2);
figure,imshow(L2);
f2=f;
f2(L2==0)=255;
figure,imshow(f2);

参考文献:

[1] Rafael C. Gonzalez, Richard E. Woods, and Steven L. Eddins. 2003. Digital Image Processing Using MATLAB. Prentice-Hall, Inc., USA.

[2] [阮秋琦. 数字图像处理(MATLAB版)[M]. 北京:电子工业出版社, 2014.](https://github.com/timerring/digital-image-processing-matlab/blob/main/reference/Digital_Image_Processing_(MATLAB_version).pdf)

[3] [冈萨雷斯. 数字图像处理(第三版)[M]. 北京:电子工业出版社, 2011.](https://github.com/timerring/digital-image-processing-matlab/blob/main/reference/Digital_Image_Processing_(Third_Edition).pdf)

目录
相关文章
|
存储 数据库 索引
Flutter笔记:滚动之-无限滚动与动态加载的实现(GetX简单状态管理版)
本文介绍Flutter中如何实无线滚动(基于GetX简单状态管理而非有状态组件)
284 0
|
4月前
|
IDE 开发工具 开发者
使用DevEcoStudio 开发、编译鸿蒙 NEXT_APP 以及使用中文插件
# 使用DevEcoStudio 开发、编译鸿蒙 NEXT_APP 以及使用中文插件 #鸿蒙开发工具 #DevEco Studio
323 1
|
JSON Java API
Java快递单号查询接口怎么接入物流API
Java怎么写物流接口,怎么接入物流接口,如何根据单号查询物流跟踪的详细信息 需求 根据用户输入的订单号,我们的后台识别订单号并根据快递鸟查询快递Api接口,实现自动查询的功能 demo实例 本人自己运行过的Demo —> 点我下载 应用场景(下图) 实现步骤 4.
10747 1
|
11月前
|
传感器 人工智能 机器人
|
Ubuntu 网络协议 关系型数据库
aaPanel Linux面板6.8.12安装教程
这篇文章介绍了aaPanel Linux面板6.8.12的安装教程。文章要求硬件配置,包括内存和硬盘,并要求安装操作系统为Centos 7.1+、Ubuntu 20、Debian 10等。文章提供了相应的安装命令,并指出命令需要在root权限下执行。此外,文章还列出了版本更新日志,包括文件管理和文件共享功能的增强,以及其他细节的调整。
753 1
|
机器学习/深度学习 自然语言处理 算法
【机器学习】包裹式特征选择之拉斯维加斯包装器(LVW)算法
【机器学习】包裹式特征选择之拉斯维加斯包装器(LVW)算法
480 0
|
SQL 关系型数据库 MySQL
MySQL 无法远程连接的解决办法
情况 1——云服务器控制台防火墙未开启 情况 2——未设置远程用户
1850 0
|
Java Spring
Spring Boot 全局懒加载
Spring Boot 全局懒加载
809 0
【初阶数据结构】栈和队列——C语言(详解)
【初阶数据结构】栈和队列——C语言(详解)
|
算法 C++ 容器
三.vector的实现原理
vector就是一个模板类,其基类什么也没干`vector<int> v;`这样的声明,只不过是调用了基类的无参构造,它什么也没干。也没有动态分配内存。 * 如果vector在构造的时候指定容器大小,那么声明时就会申请动态内存,但如果构造是默认构造,并不会申请动态内存。
755 0

热门文章

最新文章