形态学图像处理和图像分割MATLAB实验_matlab中如何对指纹图像进行分割-程序员宅基地

技术标签: matlab  计算机视觉  图像处理  数字图像处理  

一、实验目的

  1. 理解腐蚀和膨胀的原理,掌握开运算、闭运算及形态学的边界提取。
  2. 掌握孤立点检测、线检测和边缘检测的方法。
  3. 掌握全局阈值处理的方法。

二、实验内容

1. 开运算和闭运算实验。

图1(a)显示了一幅被噪声图像污染的指纹图像,图1(b)给出了结构元,请自编程序,实现以下运算:

在这里插入图片描述

(1) 用图1(b)所示的结构元对图1(a)进行腐蚀。
(2) 对图1(a)进行开运算。
(3) 对开运算的结果进行膨胀处理。
(4) 对开运算的结果进行闭运算处理。
(5) 分析实验结果。

答:

%%
%对污染的指纹图像进行腐蚀运算
clear all;close all;clc

f=imread('1.tif');%f 240x317
[M, N]=size(f);
f1=zeros(M,N);
figure;imshow(f)
se=ones(3); %结构元素为 3×3 时
[m, n]=size(se);
sx=floor(m/2); %取整
sy=floor(n/2);
f = padarray(f,[sx sy]); %对 f 进行零填充
[M, N]=size(f); %获取填充后 f 的大小

for i=sx+1:M-sx
    for j=sy+1:N-sy
        fblock=f(i-sx:i+sx,j-sy:j+sy);
        andresult=se&fblock; %与运算
        if (andresult==se)
            f1(i-sx,j-sy)=1;
        else
            f1(i-sx,j-sy)=0;
        end
    end
end
subplot(1,4,1); imshow(f1);title('腐蚀运算结果');


%%
%%对污染的指纹图像进行开运算,即腐蚀之后进行膨胀运算

f1 = padarray(f1,[sx sy]);
f2=zeros(238,315); %开运算的结果
for i=sx+1:M-sx
    for j=sy+1:N-sy
        fblock=f1(i-sx:i+sx,j-sy:j+sy);
        andresult=se&fblock;
        As=sum(sum(andresult));
        if As>0
            f2(i-sx,j-sy)=1;
        else
            f2(i-sx,j-sy)=0;
        end
    end
end

subplot(1,4,2);imshow(f2);title('开运算结果');
%%
%对开运算的结果进行膨胀处理。
f2 = padarray(f2,[sx sy]);
f3=zeros(238,315); %开运算的结果继续膨胀
for i=sx+1:M-sx
    for j=sy+1:N-sy
        fblock=f2(i-sx:i+sx,j-sy:j+sy);
        andresult=se&fblock;
        As=sum(sum(andresult));
        if As>0
            f3(i-sx,j-sy)=1;
        else
            f3(i-sx,j-sy)=0;
        end
    end
end

subplot(1,4,3); imshow(f3);title('开运算后膨胀结果');
%%
%对开运算的结果进行闭运算

f3 = padarray(f3,[sx sy]);
f4=zeros(238,315); %存储开运算后闭运算结果
for i=sx+1:M-sx
    for j=sy+1:N-sy
        fblock=f3(i-sx:i+sx,j-sy:j+sy);
        andresult=se&fblock; %与运算
        if (andresult==se)
            f4(i-sx,j-sy)=1;
        else
            f4(i-sx,j-sy)=0;
        end
    end
end

subplot(1,4,4); imshow(f4);title('开运算后闭运算结果');

在这里插入图片描述

2. 用形态学处理提取边界。

图2(a)给出了一幅简单的二值图像,图2(b)给出了结构元,请按照式(1),对图2(a)进行处理。

β ( A ) = A − ( A ⊖ B ) \beta (A)=A-(A\ominus B) β(A)=A(AB)

其中, B B B 是结构元。先通过 B B B A A A 腐蚀,再执行 A A A 和腐蚀结果之间的差,即可得到集合 A A A 的边界。

在这里插入图片描述
答:

close all; clear all; clc;
f=imread('2.tif');
%先腐蚀
se=ones(3);%结构元
[m, n]=size(se);
sx=floor(m/2); %取整
sy=floor(n/2);
f_padded = padarray(f,[sx sy]); %对 f 进行零填充
[M, N]=size(f_padded); %获取填充后 fp 的大小
for i=sx+1:M-sx
    for j=sy+1:N-sy
        fblock=f_padded(i-sx:i+sx,j-sy:j+sy);
        andresult=se&fblock; %与运算
        if (andresult==se)
            f1(i-sx,j-sy)=1;
        else
            f1(i-sx,j-sy)=0;
        end
    end
end
%后做差
fe=f-f1;
figure,imshow(fe)

在这里插入图片描述

4. 全局阈值处理。

图6给出了一幅带噪声的指纹图像,请进行以下运算:
(1) 求图6的直方图。
(2) 用 T = m T=m T=m (平均图像灰度)开始,并令 Δ T = 0.01 \Delta T=0.01 ΔT=0.01,应用“实验讲义”中给出的迭代算法得到全局阈值。
(3) 用(2)中得到的全局阈值对图像进行分割。

答:

clear all;close all;clc
f=imread('4.tif');
imhist(f);

f=im2double(f);
T=mean(f(:));%当前阈值
t=0;%下一次阈值

while abs(T-t)>0.01%当T与t相差过大
    G1=f>T;%逻辑判断,f>T的部分为1,反之为0,注意G1会是logical类型的变量
    t=0.5*mean(f(G1))+0.5*mean(f(~G1));
    T=t;
end

%显式的使用find

% index=find(f>T);
% f(index)=1;
% index=find(f<T);
% f(index)=0;
% imshow(f);

%使用逻辑索引来改善速度,不需要显式的使用find
f(f>T)=1;
f(f<=T)=0;
imshow(f);

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_51143578/article/details/130669836

智能推荐

python flask服务器假死_IE浏览器访问Flask自带服务器假死问题解决方法 - digwtx-程序员宅基地

文章浏览阅读2.5k次。在本地调试Flask应用程序,如果使用IE浏览器访问,会经常出现卡住(假死)现象,这是一个比较烦人的问题。 其实解决方法也比较简单,只要给app.run加上一个threaded=True参数或者processes=N参数(N改为实际数值)。假如: pythonif __name__ == '__main__':app.run(threaded=True)# 或者# app.run(processe..._flask服务假死的原因

MySQL 数据库常用命令-程序员宅基地

文章浏览阅读123次。MySQL数据库常用命令1、MySQL常用命令create database name; 创建数据库use databasename; 选择数据库drop database name 直接删除数据库,不提醒show tables; 显示表describe tablename; 表的详细描述select 中加上distinct去除重复字段mysqladmi...

不带头结点的单链表——数据结构课堂作业-程序员宅基地

文章浏览阅读2k次,点赞4次,收藏10次。#include <stdio.h>#include <stdlib.h>/**************************************//* 链表实现的头文件,文件名slnklist.h *//**************************************/#include <stdio.h>#include &l..._/* 假设不带头结点的单链表head是升序排列的,设计算法函数linklist insert(linkli

【蓝桥杯嵌入式学习笔记】(一)比赛及开发环境相关介绍_蓝桥杯嵌入式比赛时会提供什么-程序员宅基地

文章浏览阅读1.9k次,点赞3次,收藏33次。一、比赛相关介绍1、我刚开始学习32的时候是先学习的库函数,这种传统的库函数开发方式会花费很多时间在各种模块的初始化上面,而CubeMX+HAL库开发的方式,则是省去了初始化的部分,让我们能将更多的精力放在实现功能和逻辑设计方面。当然,库函数的开发方式也是有必要学习的,一些相关底层知识也需要一定的理解,因为 CubeMX也可能存在Bug,如果你对库函数不了解的话也会出现一些麻烦无法解决。2、蓝桥杯嵌入式比赛开发板主控芯片采用STM32G431RBT6,并预留扩展板接口。..._蓝桥杯嵌入式比赛时会提供什么

JS 离散点生成等高线图的几种方式_observable plot-程序员宅基地

文章浏览阅读1.7k次,点赞15次,收藏27次。JS 离散点生成等高线图的几种方式_observable plot

Java全栈课程之JavaSE——Java预科阶段_全栈javase项目-程序员宅基地

文章浏览阅读72次。① 系统软件:dos、windows、Linux、unix、Mac、Android、ios。5.广泛应用在:科学计算、数据处理、自动控制、计算机辅助设计、人工智能、网络等领域。2.计算机硬件组成:cpu、主板、内存、电源、主机箱、硬盘、显卡、键盘、鼠标等。2.能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。4.常见的形式有台式计算机、笔记本计算机、大型计算机等。运算器 控制器。② 应用软件:wps、QQ、微信。输入设备→存储器→输出设备。3.第三代语言:高级语言。_全栈javase项目

随便推点

计算机的外围设备找不到,bluetooth外围设备驱动程序找不到怎么办?来看看详细的解决方案...-程序员宅基地

文章浏览阅读6.8k次。bluetooth外围设备驱动程序找不到怎么办?最近小编在朋友在家玩的时候,他的电脑出现了“bluetooth外围设备找不到驱动程序”的问题,于是,朋友求助我,想让我帮他解决一下这个问题,下面智能手机网不来分享一下Win7系统出现bluetooth外围设备找不到驱动程序的解决方法吧,赶紧来瞧一瞧。bluetooth外围设备找不到怎么办bluetooth外围设备驱动程序找不到的解决方案操作步骤一:1..._bluetooth外围设备找不到驱动程序怎么办

Literature Lesson_lietrature lesson程序-程序员宅基地

文章浏览阅读424次。A. Literature Lessontime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputVera adores poems. All the poems Vera knows are_lietrature lesson程序

回调函数例子-程序员宅基地

文章浏览阅读1k次。回调函数_回调函数例子

能量俘获阅读【5】- 纳米摩擦发电机之精密传感 - TENG文献阅读- 摩擦电子晶体管传感器用于增强型氢气检测传感装置_纳米摩擦发电机 用于传感-程序员宅基地

文章浏览阅读197次。这篇是近期,国家纳米中心的庞耀坤、陈立波、胡国锋等学者在NANO RESEARCH期刊上发表在Nano Research 上的一篇关于先进氢气监测传感器的文章,英文名称是:Tribotronic transistor sensor for enhanced hydrogen detection 研究团队将ZnO场效应晶体管(FET)与摩擦电纳米发电机在独立模式下耦合,研制了一种新型ZnO摩擦电子晶体管,并将其用作室温下氢气检测传感器。_纳米摩擦发电机 用于传感

python爬虫之Scrapy介绍八——Scrapy-分布式(以爬取京东读书为示例)_京东读书校园版 python-程序员宅基地

文章浏览阅读781次。Scrapy-分布式(scrapy-redis)介绍1 Scrapy-分布式介绍1.1 Scrapy-redis工作原理1.2 Scrapy-redis 安装和基本使用1.2.1 安装1.2.2 基本使用2 Scrapy转为Scrapy-分布式2.1 scrapy爬取京东读书2.2 改为Scrapy-分布式1 Scrapy-分布式介绍1.1 Scrapy-redis工作原理首先回顾一下Scrapy的工作流程,然后进一步介绍Srapy-分布式的工作流程和原理。(1)Scrapy的工作流程详见:pyt_京东读书校园版 python

java后台怎么设置转盘抽奖_[Java教程]转盘抽奖-程序员宅基地

文章浏览阅读492次。[Java教程]转盘抽奖0 2015-09-09 12:00:06html部分 css部分,由于做的这个转盘是手机端的,采用的响应式布局.turntableWap{ padding:1rem; b...

推荐文章

热门文章

相关标签