Matlab一种二值化图像的形态学操作程序

合集下载

MATLAB:图像二值化、互补图(反运算)(im2bw,imcomplement函数)

MATLAB:图像二值化、互补图(反运算)(im2bw,imcomplement函数)

MATLAB:图像⼆值化、互补图(反运算)
(im2bw,imcomplement函数)
图像⼆值化、反运算过程涉及到im2bw,imcomplement函数,反运算可以这么理解:原本⿊的区域变为⽩的区域,⽩的区域变为⿊的区域。

实现过程如下:
close all; %关闭当前所有图形窗⼝,清空⼯作空间变量,清除⼯作空间所有变量
clear all;
clc;
J=imread('rice.png');% 读取灰度图像,赋值给J
J1=im2bw(J);%将灰度图像转换成⼆值图像,赋值给J1
J2=imcomplement(J);%求灰度图像的补,即对图像进⾏求反运算,赋值给J2
J3=imcomplement(J1);%求⼆值图像的补,赋值给J3
set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图形图像位置的默认设置
set(0,'defaultFigureColor',[1 1 1]) %修改图形背景颜⾊的设置
figure, %显⽰运算结果
subplot(131),imshow(J1) %显⽰灰度图像及其补图像
subplot(132),imshow(J2) %显⽰⼆值图像及其补图像
subplot(133),imshow(J3)
效果图如下:
J1是J3的补图,即J1⽩的区域变为J3⿊的部分,反之。

imclose函数

imclose函数

imclose函数imclose函数是MATLAB图像处理工具箱中的一种形态学操作函数,主要用于消除图像中的小空洞和断裂,并连接靠近的物体。

imclose函数的调用格式如下:```matlabBW2 = imclose(BW,SE)```BW是二值图像,SE是形态学结构元素,BW2是输出的二值图像。

imclose函数实现的是先进行图像膨胀操作,再进行图像腐蚀操作。

这种操作的效果是可以关闭图像中的小空洞,并连接靠近的物体。

而且,imclose函数的效果是与结构元素的大小和形状有关。

SE可以使用strel函数创建,strel函数的调用格式如下:shape是结构元素的形状,可以是'line'、'disk'或'rectangle'等,parameters是结构元素的参数。

比如当shape为'rectangle'时,parameters可以是[3,3],表示3行3列的方形结构元素。

为了更深入了解imclose函数,下面将详细介绍它的使用方法和一些注意事项。

使用方法1. 读取图像并二值化```matlabclc,clear all,close all;I = imread('circles.png');BW = imbinarize(I);figure,imshow(BW);```3. 定义结构元素3. 使用imclose函数进行形态学操作此时,可以看到图像中原本存在的空洞和断裂被连接成了一个整体。

注意事项1. SE的选择和参数的设置SE的选择和参数的设置会影响形态学操作的效果。

可以根据实际需求进行调整。

2. 图像大小对于大图像的处理,imclose函数的运行速度会比较慢。

可以考虑对图像进行裁剪,或者使用其他技术来使得图像的大小合适。

3. 相关函数除了imclose函数外,还有其他一些相关的形态学操作函数,比如imopen、imdilate 和imerode等。

如何在Matlab中进行图像分析和形态学处理

如何在Matlab中进行图像分析和形态学处理

如何在Matlab中进行图像分析和形态学处理图像处理是计算机视觉领域中的一个重要分支,它主要涉及到对图像进行数字化处理和分析,从而得到我们所需要的信息。

Matlab是一种非常强大和灵活的软件工具,广泛应用于图像处理和计算机视觉领域。

本文将介绍如何在Matlab中进行图像分析和形态学处理。

一、图像分析基础在进行图像分析之前,我们首先需要了解图像的基本知识和图像处理的基本步骤。

图像可以看作是由像素组成的二维矩阵,每个像素具有一定的亮度值。

图像处理的基本步骤包括加载图像、显示图像、调整图像大小和颜色空间转换等。

1. 加载图像在Matlab中,可以使用imread函数来加载图像。

例如,对于名为image.jpg的图像文件,可以使用以下代码加载图像:```matlabimage = imread('image.jpg');```2. 显示图像通过imshow函数可以将加载的图像显示在Matlab的图像窗口中。

例如,可以使用以下代码将图像显示在窗口中:```matlabimshow(image);```3. 调整图像大小有时候需要将图像调整为所需要的尺寸。

Matlab提供了imresize函数来实现图像的大小调整。

例如,可以使用以下代码将图像调整为200x200像素:```matlabresized_image = imresize(image, [200, 200]);```4. 颜色空间转换在图像分析过程中,有时候需要将图像从一个颜色空间转换为另一个颜色空间。

Matlab提供了多种颜色空间转换函数,如rgb2gray、rgb2hsv等。

例如,可以使用以下代码将RGB彩色图像转换为灰度图像:```matlabgray_image = rgb2gray(image);```二、图像分析算法图像分析算法是图像处理的核心内容,它主要用于提取图像中的特征和信息。

在Matlab中,有许多常用的图像分析算法和函数,如边缘检测、特征提取和目标检测等。

matlab 二值化 阈值

matlab 二值化 阈值

matlab 二值化阈值
二值化是将灰度图像转换为二值图像的过程。

阈值是二值化的关键参数之一,是用来确定将灰度图像中哪些像素点转换为黑色像素,哪些像素点转换为白色像素。

在matlab中,二值化可以通过以下代码实现:
1.使用im2bw函数指定阈值进行二值化:
```。

I = imread('image.jpg');。

threshold = 128; % 设定阈值。

BW = im2bw(I, threshold/256); % 将图像进行二值化。

imshow(BW);。

```。

2.使用graythresh函数自适应确定阈值进行二值化:
```。

I = imread('image.jpg');。

level = graythresh(I); % 自适应确定阈值。

BW = im2bw(I, level); % 将图像进行二值化。

imshow(BW);。

```。

需要注意的是,灰度图像的像素值范围为0~255,在matlab中使用时需要将阈值设定为0~1之间的小数。

1.bwmorph函数--形态学操作,包括imopen,imclose和其他几种不同的操作

1.bwmorph函数--形态学操作,包括imopen,imclose和其他几种不同的操作
imgdat = logical([1, 1, 1; 1, 0, 1; 1, 1, 1]);
retdat = bwmorph(imgdat, 'fill') % using 'fill' option
输出结果:
retdat =
1 1 0
1 1 1
0 1 1
retdat =
'skel': 在这里n = Inf,骨架提取但保持图像中物体不发生断裂;不改变图像欧拉数;
'spur': 去除小的分支, 或引用电学术语“毛刺”;
'thicken': 在这里n = Inf, 通过在边界上添加像素达到加粗物体轮廓的目的;
'thin': 在这里n = Inf,进行细化操作;
'tophat': 进行“top hat”形态学运算, 返回源图像减去开运算的图像;
'dilate': 使用结构元素ones(3)对图像进行膨胀运算;
'endpoints': 找到骨架中的结束点;
'erode': 使用结构元素ones(3)对图像进行腐蚀运算;
'fill': 填充孤立的黑点, 比如3*3的矩阵, 除了中间元素为0外, 其余元素全部为1, 则这个0将被填充为1;
'hbreak': 断开图像中的H型连接;
'majority': 如果一个像素的8邻域中有等于或超过5个像素点的像素值为1, 则将该点像素值置1;
'open': 进行形态学开运算(即先膨胀后腐蚀);
'remove': 如果一个像素点的4邻域都为1, 则该像素点将被置0;该选项将导致边界像素上的1被保留下来;

图像分析MATLAB实现的图像的基本操作1灰度化、二值化,图像的加、减、乘、除运算,图像的与、或、非

图像分析MATLAB实现的图像的基本操作1灰度化、二值化,图像的加、减、乘、除运算,图像的与、或、非

大学生作业科目:数字图像分析与理解学号:姓名:时间:通过matlab对图像的一些基本操作如下:定义move函数代码:function J = move( I,a,b )%UNTITLED 此处显示有关此函数的摘要% 此处显示详细说明%a,b为平移量,I为原图像,J为平移后图像[M,N,G]=size(I);I=im2double(I);J=ones(M,N,G);for i=1:Mfor j=1:Nif((i+a)>=1&&(i+a)<=M&&(j+b)>=1&&(j+b)<=N) %判断平移后行列是否超过范围J(i+a,j+b,:)=I(i,j,:);endendend主函数代码:A=imread('happyC.jpg');B=imread('happyI.jpg');C=imread('happyP.jpg');imshow(A);A_gray=rgb2gray(A);A_bw=im2bw(A);B_bw=im2bw(B);C_bw=rgb2gray(C);figure,imshow(A_gray);figure,imshow(A_bw)addP=imadd(A,B);subP=imsubtract(A,B);mulP=immultiply(A,B);divP=imdivide(A,B);andP=A_bw&B_bw;orP=A_bw|B_bw;noP=~B_bw;R=2;% 变化后图像[row,col,color] = size(C); % 获得图像的行列数及色板数row = round(row*R); % 新图像行col = round(col*R); % 新图像列% 新图像初始化% 使用class获得原图像的数据类型,使得新图像数据类型与原图像保持一致img_new = zeros(row,col,color,class(C));% 对新图像的行、列、色板赋值for i = 1:rowfor j = 1:colfor n = 1:colorx = round(i/R);y = round(j/R);if x == 0x = x+1;endif y ==0y = y+1;endu = i/R-floor(i/R); %求取水平方向上的权重v = j/R-floor(j/R); %求取垂直方向上的权重% 此处需要对图像边缘进行例外处理% 本例对图像右边缘及下边缘用最近邻插值计算if i >= row-R || j >= col-Rimg_new(i,j,n) = C(x,y,n);elseimg_new(i,j,n) =u*v*C(x,y,n)+(1-u)*v*C(x+1,y,n)+u*(1-v)*C(x,y+1,n)+(1-u)*(1-v)*C(x+1,y+ 1,n);endendendendfigure,imshow(B);figure;subplot(2,2,1);imshow(addP);title('加法');subplot(2,2,2);imshow(subP);title('减法');subplot(2,2,3);imshow(mulP);title('乘法');subplot(2,2,4);imshow(divP);title('除法');C_mov=move(C,50,50);C_res=imresize(C,2,'bilinear');C_rot=imrotate(C,45,'loose');C_mir1=flip(C,1);%原图像的水平镜像C_mir2=flip(C,2);%原图像的垂直镜像figure;subplot(1,3,1);imshow(andP);title('与运算'); subplot(1,3,2);imshow(orP);title('或运算');subplot(1,3,3);imshow(noP);title('非运算');figure;subplot(121);imshow(C);title('原图');subplot(122);imshow(C_mov);title('平移后'); figure;%subplot(121);imshow(C);title('原图');%subplot(122);figure;imshow(C_res);title('放大后');figure;subplot(121);imshow(C);title('原图');subplot(122);imshow(C_rot);title('旋转后'); figure;subplot(131);imshow(C);title('原图');subplot(132);imshow(C_mir1);title('水平镜像后'); subplot(133);imshow(C_mir2);title('垂直镜像后'); figure;%subplot(121);imshow(C);title('原图');%subplot(122);figure;imshow(img_new);title('插值后');基本操作图像如下:。

matlab灰度处理二值化处理

matlab灰度处理二值化处理

Matlab在图像处理领域有着广泛的应用,其中灰度处理和二值化处理是常见的图像处理方法之一。

本文将详细介绍Matlab中的灰度处理和二值化处理的原理和实现方法。

一、灰度处理1. 灰度图像的概念灰度图像是指图像中每个像素的灰度值介于0-255之间的图像。

在灰度图像中,0代表黑色,255代表白色,中间的灰度值代表了不同程度的灰色。

2. 灰度处理的原理灰度处理是将彩色图像转换为灰度图像的过程。

在Matlab中,可以通过以下公式实现灰度处理:灰度值 = 0.299 * R + 0.587 * G + 0.114 * B其中,R、G、B分别代表彩色图像中的红色、绿色和蓝色分量。

通过对每个像素的RGB分量进行加权求和,可以得到对应的灰度值。

3. 灰度处理的实现在Matlab中,可以使用`rgb2gray`函数实现灰度处理。

具体的代码如下:```matlab读取彩色图像rgbImage = imread('example.jpg');灰度处理grayImage = rgb2gray(rgbImage);显示灰度图像imshow(grayImage);```二、二值化处理1. 二值化图像的概念二值化图像是指将灰度图像中的像素值转换为0或255的图像。

在二值化图像中,像素值为0代表黑色,像素值为255代表白色。

2. 二值化处理的原理二值化处理的目的是将灰度图像中的灰度值转换为0或255。

一般可以通过设置一个阈值,将低于阈值的像素值设为0,将高于阈值的像素值设为255。

3. 二值化处理的实现在Matlab中,可以使用`im2bw`函数实现二值化处理。

具体的代码如下:```matlab读取灰度图像grayImage = imread('example_gray.jpg');设置阈值threshold = 128;二值化处理binaryImage = im2bw(grayImage, threshold/255);显示二值化图像imshow(binaryImage);```三、总结本文详细介绍了Matlab中灰度处理和二值化处理的原理和实现方法。

Matlab对图片的二值化处理

Matlab对图片的二值化处理

Matlab对图⽚的⼆值化处理 这⼏天做了⼀道题⽬,要求在 5000 张图⽚中找出 30 张与样例相同但经过放⼤或缩⼩,⾼亮或变暗的图⽚。

整体思路是把图⽚hash成⼀段指纹,这个指纹和图⽚的⼤⼩、格式、明暗均⽆关,只和图⽚的内容本⾝有关。

1.先把彩⾊图⽚转为灰度图 如果原本的⼀个像素点的rgb值为(r1,g1,b1),⼀个⽐较简易的⽅法转为灰度图, 就是 gray1=(r1*299+g1*587+b1*114+500)/1000 那么该像素点的rgb颜⾊变为(gray1,gray1,gray1)。

⽽我⽤的是 Matlab 中的函数 imgray = rgb2gray(imdata); 2.将灰度图转化为⿊⽩图 先计算出该图的平均灰度,⼀种⽐较简易的做法是把所有像素点的灰度求和平均。

然后对于每个像素点,如果⼩于平均灰度,则rgb值为(0,0,0),否则为(255,255,255)。

经过这⼀步,图⽚就变成⿊⽩的了。

我⽤的是 Matlab 中函数 lev = graythresh( imdata); 求平均灰度,再 bwimg = im2bw( imdata, lev);求⼆值图。

但这样的函数对于⼀些⾼亮或灰暗的图⽚的处理不是特别的好,会使整个图⽚呈现全⽩或全⿊的现象。

我对于这些图⽚的处理是⾃⼰设定 lev,根据需要设 lev 为 0~1 的值,⽽不是求图⽚的平均值。

(找到更好的⽅法再来更新)。

4 编码 将之前的⼆值图放⼤或缩⼩为 8*8 的⼀个矩阵 imdata = imresize(imdata, [8,8]); ⽩为 0,⿊为 1 整合成 1 个 64 位的⼆进制,转化为 16 进制则是这个图⽚的指纹了。

在这⾥,我并没有转换成 16 进制进⾏⽐较,⽽是直接对⼆进制串做的对⽐,完全相同的并不多,所以不同的字符在⼗个之内我都算成相似的,再进⾏进⼀步的⽐较。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Matlab中将一幅图像阈值分割二值化非常简单,若需要通过阈值th2二值化保留一些大面积的、且有灰度值含有大于th1的点的前景区域,而不需要小面积的区域(th1大于th2),这时会遇到这样的问题:当阈值选为th2时会把一些小面积区域也保留下来;若把阈值增大到th1,小面积的区域没了,但是原来大面积的区域又会减小;若要直接去掉阈值th2二值化图像中面积小于某一值的的区域,需要计算每个区域的面积,计算量大,而且有的区域中并没有含有大于th1的点。

下面利用数学形态学的方法来解决上述问题。

这里主要是采用数学形态学中的腐蚀与膨胀操作,采用均值滤波、灰度图像高阈值二值化、种子点选择、灰度图像低阈值二值化和选择滤波相结合的方法,具体来说:腐蚀过程采用均值滤波和高阈值对第一细分图像二值化,滤掉面积较小的区域,得到较大的区域,然后选择每个区域的种子点;膨胀过程采用低阈值对第一细分图像二值化,保留含有种子点的区域,其它的均过滤掉。

经过腐蚀和膨胀操作后,得到所希望的结果,见下图。

程序如下:
wmf10=imread('mwf1.bmp'); %读取图像
wmf1=wmf10(:,:,1);%由于是灰度图像,三个页面相同,故只对第一页面数据操作
figure(1);
subplot(121);imagesc(wmf1);colormap(gray); %显示原图象
h=fspecial('average',3);
wmf1_filted=uint8(round(filter2(h,wmf1))); %均值滤波
th1=0.94*max(max(wmf1)); %确定阈值th1
wmf1th1=(wmf1_filted>th1); %按阈值th1二值化
[wmf1th1_label numth1_label]=bwlabel(wmf1th1,8);
rc=zeros(2,numth1_label); %选择种子点坐标
for i=1:numth1_label
[r c]=find(wmf1th1_label==i);
rc(1,i)=r(2);rc(2,i)=c(2);
end
r=rc(1,:);
c=rc(2,:);
coe=1.4;
th2=mean2(wmf1)+coe*std2(wmf1); %确定阈值th2
wmf1th2=(wmf1>th2); %按阈值th2二值化
wmf1th2_select=bwselect(wmf1th2,c,r,8); %保留含有种子点的前景区域subplot(122);imagesc(wmf1th2_select);colormap(gray);
上述程序主要是采用了bwlabel和beselect函数,虽然没有直接使用Matlab的形态学操作的膨胀、腐蚀函数,但其实质过程和达到的效果是遵循形
态学操作原理的,因而这也为形态学操作提供了其他的编程实现过程。

有心的读者可以试试看,能否用dilate和erosion函数完成同样的任务。

matlab数学形态学图像边缘检测
blood = imread('test.jpg');
[x,y,z]=size(blood); % 求出图象大小
b=double(blood);
N =sqrt(100) * randn(x,y,z); % 生成方差为10的白噪声
I=b+N; % 噪声干扰图象
for i=1:x % 实际图象的灰度为0~255 for j=1:y
if (I(i,j)>255)
I(i,j)=255;
end
if (I(i,j)<0)
I(i,j)=0;
end
end
end
z0=max(max(I)); % 求出图象中最大的灰度
z1=min(min(I)); % 最小的灰度
T=(z0+z1)/2;
TT=0;
S0=0; n0=0;
S1=0; n1=0;
allow=0.5; % 新旧阈值的允许接近程度
d=abs(T-TT);
count=0; % 记录几次循环
while(d>=allow) % 迭代最佳阈值分割算法
count=count+1;
for i=1:x
for j=1:y
if (I(i,j)>=T)
S0=S0+I(i,j);
n0=n0+1;
end
if (I(i,j)<T)
S1=S1+I(i,j);
n1=n1+1;
end
end
end
T0=S0/n0;
T1=S1/n1;
TT=(T0+T1)/2;
d=abs(T-TT);
T=TT;
end
Seg=zeros(x,y);
for i=1:x
for j=1:y
if(I(i,j)>=T)
Seg(i,j)=1; % 阈值分割的图象
end
end
end
SI=1-Seg; % 阈值分割后的图象求反,便于用腐蚀算法求边缘
se1=strel('square',3); % 定义腐蚀算法的结构
SI1=imerode(SI,se1); % 腐蚀算法
BW=SI-SI1; % 边缘检测
%=====传统的边缘检测方法======%
I=uint8(I);
BW1=edge(SI,'sobel', 0.11);
BW2=edge(SI,'log', 0.015);
%===========图象显示==========%
figure(1);
imshow(I);title('Original') % 显示阈值分割的图象
figure(2);
imshow(BW2);title('Soble') % 显示新算法的边缘图象
figure(3)
imshow(BW1);title('Gauss-Laplace')
figure(4)
imshow(BW);title('New algorithm')。

相关文档
最新文档