2、matlab 图像分割(1)

本文介绍如何使用Matlab进行图像分割。通过将图像转换为二值图,利用find函数找到非零元素坐标,进而确定目标区域,实现图像的精确切割。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的:利用图像的坐标点,判断出想要分割出的部分,利用 matlab 语法实现分割


1. 基本语法

1.1 定义矩阵

var =[ 1 2 3;
	   4 5 6];

定义一个 2×3 的矩阵,该变量会出现在工作区,可以在命令行用变量输出该矩阵

在这里插入图片描述

1.2 find 函数

find(var)

查找出矩阵 var 中的非零坐标并返回这些坐标的点,可以返回为一维数组或二维数组

当返回给一个变量时,是一个一维数组,数组中存的是矩阵中 非 0 点 的位置编号,原图中的位置编号从上到下、从左到右顺序为1、2、3···
在这里插入图片描述
当返回给一个矩阵时,将横纵坐标分别赋值给两个矩阵变量,两个变量相同位置的值确定一个非 0 像素点的坐标。
在这里插入图片描述

可以为 find 中参数指定条件,比如查找大于或等于某个值的元素的坐标:
在这里插入图片描述在这里插入图片描述


1.3 切割图像

a(r1:r2, c1:c2)

返回矩阵或图片的 r1r2 行, c1c2 列,其中每个 " , " 区分一个维度,可以根据需要选择有几个维度。单独一个 " : " 作为一个维度代表选取所有行或列。

图片可以理解为一个矩阵,因为图片是由很多的像素点组成的,每个像素点都有自己的值,不同的值用来表示不同的颜色,因此图片就是一个矩阵。
在这里插入图片描述

2. 图像分割

2.1 切割月亮(1)

将下图中的月亮用以上函数切割成单独的图片。
在这里插入图片描述
步骤:

  1. 先转换为二值图,图片在二值图的情况下较好处理。由于二值图只有一个维度,所以只有一个维度的横纵坐标,而每个像素点的取值只有 01 ,方便查找非 0 像素点,从而确定月亮的边界,再在原图找到相应位置,利用上面的函数进行切割。
  2. 利用 find 找到二值图中所有的非 0 元素(二值图黑色为 0,白色为1)。
  3. 找到非 0 元素的横纵坐标的范围,截取原图中的这个范围的图片即可。

代码实现:

clear,clc,close all;
f=imread('moon.jpg');
g=rgb2gray(f);
b=imbinarize(g);   %转换为二值图
imshow(b);
[r,c]=find(b);     %找到非零的坐标赋给[r,c]
result=f(min(r):max(r),min(c):max(c),:);    %该句解释在下方
figure,imshow(result);
result=f(min(r):max(r), min(c):max(c),:);

对图片 f 进行切割操作,因为 f 是 rgb 图,有三个维度,所以操作中有三个维度,在上面的 find 函数是在二值图中找到非零的横纵坐标的值,r 中存的是非 0 像素点的行的所有坐标,c 存的是非 0 像素点的列的所有坐标。
根据图像可知,行坐标的最大值和最小值是月亮的上下边界,所以用 min( r ):max( r ) 选中;用 min( c ):max( c ) 选中列坐标的最大值和最小值,是月亮的左右边界;第三维为色彩,用 ’ : ’ 全部选中,显示彩色图(具体为什么会显示彩色图,这里有讲解,大家可以参考理解)。

代码运行效果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值