数字图像处理(三)

目录

实验六、图像分割方法

 实验七、图像识别与分类


实验六、图像分割方法

一、实验目的

  1. 了解图像分割技术相关基础知识;
  2. 掌握几种经典边缘检测算子的基本原理、实现步骤
  3. 理解阈值分割、区域分割等的基本原理、实现步骤。
  4. 理解分水岭分割方法的基本原理、实现方法。

二、实验环境

MATLAB 2014以上版本、Win 8\10\11 系统

三、实验原理

1.图像分割原理

图像分割是把图像分割成若干个特定的、具有独特性质的区域并提取出感兴趣的目标的技术和过程。在对图像的研究和应用中,人们往往仅对图像的某些部分感兴趣(目标或背景),一般对应图像中特定的、具有独特性质的区域。为了分析和识别目标,需要将这部分区域分割并提取出来。由于图像分割技术在当今图像工程的发展过程中起着十分重要的作用,得到了广泛应用,促使人们致力于寻找新的理论和方法来提高图像分割的质量,以满足各方面的需求。

涉及函数:imread、figure、imshow、subplot、rgb2gray、imwrite、edge、graythresh

四、实验内容

(1)新建一个m文件,从桌面示例图像文件夹中读取一张彩色图像,转换为灰度图,分别使用Robert、Sobel、Canny、Laplacian算子检测图像边缘,并将原图及边缘检测结果显示在同一figure界面,比较检测结果异同。

clc;clear;close all;

I=imread('V.jpg');

gray_img = rgb2gray(I);

BW1=edge(gray_img,'Roberts',0.04);

BW2=edge(gray_img,'Sobel',0.04);

BW3=edge(gray_img,'Canny',0.04);

BW4=edge(gray_img,'log',0.04);

subplot(321),imshow(I),title('原图像')

subplot(323),imshow(BW1),title('Roberts检测图像')

subplot(324),imshow(BW2),title('Sobel检测图像')

subplot(325),imshow(BW3),title('Canny检测图像')

subplot(326),imshow(BW4),title('Laplacian检测图像')

(2)读取一张彩色图像,转换为灰度图,使用最大类间方差法分割图像,原图及分割结果显示在同一界面。

clc;clear;clear all;

% 读取彩色图像

color_img = imread('V.jpg');

% 转换为灰度图像

gray_img = rgb2gray(color_img);

% 最大类间方差法分割图像

threshold = graythresh(gray_img);

seg_img = imbinarize(gray_img, threshold);

% 显示原图及分割结果

figure;

subplot(1,2,1);

imshow(color_img);

title('原图');

subplot(1,2,2);

imshow(seg_img);

title('分割结果');

(3)读取一张彩色图像,使用区域生长法对图像进行分割,原图及分割结果显示在同一界面。

clc;clear;close all;

A0=imread('V.jpg');%读取图像

seed=[1,2];%选择起始位置

thresh=15;%相似性选择阈值

A=rgb2gray(A0);%灰度化

A=imadjust(A,[min(min(double(A)))/255,max(max(double(A)))/255],[]);

A=double(A);%将图像灰度化

B=A;

[r,c]=size(B);%r为行数,c为列

n=r*c;%计算图像包含点的个数

pixel_seed=A(seed(1),seed(2));%原图起始点灰度值

q=[seed(1),seed(2)];%q用来装载起始位置

top=1;%循环判断flag

M=zeros(r,c);%建立一个与原图大小一样的矩阵

M(seed(1),seed(2))=1;%将起始点赋为1,其余为0

count=1;%计数器

while top~=0 %循环结束条件

    r1=q(1,1);%起始点行位置

    c1=q(1,2);%起始点列位置

    p=A(r1,c1);%起始点灰度值

    dge=0;

    for i=-1:1%周围点循环判断

        for j=-1:1

           

            if r1+i<=r & r1+i>0 & c1+j<=c & c1+j>0%保证在点周围范围内

                if abs(A(r1+i,c1+j)-p)<=thresh & M(r1+i,c1+j)~=1

                    top=top+1;%满足判定条件则top+1,top为多少,则q的行数有多少

                    q(top,:)=[r1+i,c1+j];%将满足判定条件的周围点位置赋予q,q记载了满足判定的每一外点

                    M(r1+i,c1+j)=1;%满足判定条件将M中相对应的点赋1

                    count=count+1;%统计满足条件的点个数,其实与top此时的值一样

                    B(r1+i,c1+j)=1;%满足判定条件将B中相对应点赋值1

                end

               

                if M(r1+i,c1+j)==0;%如果M中相对应的值为0,将dge赋值为1,也就是说这几个点不满足条件

                    dge=1;

                end

               

            else

                dge=1;%在图像外将dge赋值为1

            end

        end

    end

    %此时对周围几点判断完毕,在点在图像外或不满足判定条件则将dge赋为1,满足条件dge为0

    if dge~=1

        B(r1,c1)=A(seed(1),seed(2));%将原图起始位置赋予B

    end

   

    if count>=n%如果满足判定条件的点个数大于等于n

        top=1;

    end

   

    q=q(2:top,:);

    top=top-1;

end

subplot(121),imshow(A,[]);

subplot(122),imshow(B,[]);

(4)读取一张彩色图像,使用一般分水岭算法对图像进行分割,原图及分割图像显示在同一界面。

clc;clear;close all;

% 读取彩色图像

image = imread('V.jpg');

% 将图像转换为灰度图像

gray_image = rgb2gray(image);

% 对灰度图像进行分水岭分割

segmented_image = watershed(gray_image);

% 将原图和分割图像显示在同一界面

figure;

subplot(1,2,1);

imshow(image);

title('原图');

subplot(1,2,2);

imshow(segmented_image);

title('分割图像');

 实验七、图像识别与分类

一、实验目的

  1. 了解图像识别与分类技术相关基础知识;
  2. 掌握几种图像特征提取方法的基本原理、实现步骤
  3. 了解图像识别与分类的基本原理、实现步骤。
  4. 掌握基础图像识别与分类任务设计方法,并编程实现。

二、实验环境

MATLAB 2014以上版本、Win 8\10\11 系统

三、实验原理

图像识别是指通过计算机对图像进行处理、分析和处理,以识别各种不同模式的目标和对象的技术,图像分类则是根据目标的不同特征基于分类器或判别器判别输入图像所属类别过程。图像的识别与分类是数字图像处理与分析领域中最为经典的应用与任务之一。

传统图像识别与分类方法基本流程如下:

涉及函数:imread、figure、imshow、subplot、rgb2gray、imwrite、imdilate、bwmorph、strel、imerode等

四、实验内容

(1)新建一个m文件,从桌面示例图像文件夹中读取一张彩色图像,转换为灰度图,使用strel构造两个不同的结构元素,接着利用imdilate函数分别进行膨胀处理,并将原图及两个膨胀处理结果显示在同一figure界面。

clc;clear;close all;

I=imread('V.jpg');

J=rgb2gray(I);

se1=strel('ball',5,5);

se2=strel('octagon',3);

K1=imdilate(J,se1);

K2=imdilate(J,se2);

figure

subplot(131),imshow(I),title('原图像')

subplot(132),imshow(K1),title('膨胀结果1')

subplot(133),imshow(K2),title('膨胀结果2')

(2)从桌面示例图像文件夹中读取一张彩色图像,转换为灰度图,使用strel构造两个不同的结构元素,接着利用imerode函数分别进行腐蚀处理,并将原图及两个腐蚀处理结果显示在同一figure界面。

clc;clear;close all;

I=imread('V.jpg');

J=rgb2gray(I);

se1=strel('ball',5,5);

se2=strel('octagon',3);

K1=imerode(J,se1);

K2=imerode(J,se2);

figure

subplot(131),imshow(I),title('原图像')

subplot(132),imshow(K1),title('腐蚀结果1')

subplot(133),imshow(K2),title('腐蚀结果2')

(3)使用im2bw函数将下图转为二值图像,使用开运算先腐蚀后膨胀,分别提取图中的矩形块及线段,结果显示在同一figure,分别命名为“原始二值图像”、“矩形块提取结果”、“线段提取”。

 

clc;clear;close all;

% 读取图像

image = imread('a.jpg');

% 将图像转为二值图像

binary_image = im2bw(image);

% 创建一个新的figure,并将原始二值图像显示在第一个子图中

figure;

% 子图1:原始二值图像

subplot(1, 3, 1);

imshow(binary_image);

title('原始二值图像');

% 应用开运算进行腐蚀和膨胀

se = strel('square', 5); % 定义一个5x5的正方形结构元素

opened_image = imopen(binary_image, se);

% 子图2:矩形块提取结果

subplot(1, 3, 2);

imshow(opened_image);

title('矩形块提取结果');

% 提取线段

line_image = binary_image - opened_image;

% 子图3:线段提取结果

subplot(1, 3, 3);

imshow(line_image);

title('线段提取');

% 调整子图的布局

sgtitle('图像处理结果');

(4)将下图转为二值图像,并进行降噪、锐化处理,通过形态学运算提取轮廓,并进行计数。

 

clc;clear;close all;

% 读取图像

image = imread('b.jpg');

% 将图像转为灰度图像

grayImage = rgb2gray(image);

% 将灰度图像转为二值图像

binaryImage = imbinarize(grayImage);

% 降噪处理

denoisedImage = medfilt2(binaryImage);

% 锐化处理

sharpKernel = fspecial('unsharp');

sharpImage = imfilter(denoisedImage, sharpKernel, 'replicate');

% 形态学运算提取轮廓

se = strel('disk', 1); % 创建一个半径为1的圆形结构元素

morphImage = imtophat(sharpImage, se);

% 计数轮廓

[~, count] = bwlabel(morphImage);

% 显示处理结果

figure;

subplot(2, 2, 1);

imshow(binaryImage);

title('二值图像');

subplot(2, 2, 2);

imshow(denoisedImage);

title('降噪处理');

subplot(2, 2, 3);

imshow(sharpImage);

title('锐化处理');

subplot(2, 2, 4);

imshow(morphImage);

title('形态学运算提取轮廓');

% 显示轮廓数量

disp(['轮廓数量:', num2str(count)]);

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/35831.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ModaHub魔搭社区:Zilliz Cloud快速开始教程(一)

目录 前提条件 创建 Collection 查看 Collection 插入数据 本教程涵盖以下 Zilliz Cloud 集群操作指南: 创建 Collection查看 Collection插入数据向量搜索、向量查询、通过 ID 获取 Entity删除 Entity删除 Collection 前提条件 在本文档中,我们将使用 Milvus 的 SDK。…

mysql单表查询,排序,分组查询,运算符,select,order by,group by

CREATE TABLE emp (empno int(4) NOT NULL, --员工编号ename varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,--员工名字job varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,--员工工作mgr int(4) NULL DEFAULT NU…

【计算机视觉】YOLOv8的测试以及训练过程(含源代码)

文章目录 一、导读二、部署环境三、预测结果3.1 使用检测模型3.2 使用分割模型3.3 使用分类模型3.4 使用pose检测模型 四、COCO val 数据集4.1 在 COCO128 val 上验证 YOLOv8n4.2 在COCO128上训练YOLOv8n 五、自己训练5.1 训练检测模型5.2 训练分割模型5.3 训练分类模型5.4 训练…

华为OD机试真题 Java 实现【快递投放问题】【2023 B卷 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、Java算法源码五、效果展示1、输入2、输出 一、题目描述 有N个快递站点用字符串标识&#xff0c;某些站点之间有道路连接。每个站点有一些包裹要运输&#xff0c;每个站点间的包裹不重复&#xff0c;路上有检查站会导致部分货物无…

博客质量分计算——发布 version 5

目录 1. 背景2. 质量分 version 52.1 version 4 存在问题分析2.2 version 5 改进2.3 消融分析2.3.1 正向积极得分消融实验2.3.2 正向累积得分单变量实验2.3.3 非高分文章消融实验 2.4 V4 和 V5 版本质量分分布对比 3. 总结4. 参考 1. 背景 博客质量分顾名思义是用于衡量一篇博…

MyBatis查询数据库(1)

前言&#x1f36d; ❤️❤️❤️SSM专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 经过前⾯的学习咱们 Spring 系列的基本操作已经实现的差不多了&#xff0…

企业为什么要做自动化测试?如何成功实施自动化测试?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 企业为什么需要自…

掌握Python文件操作的绝招:打造数据之径,揭开文件操作的神秘面纱

文章目录 前言文件的基本操作打开文件操作关闭文件操作对文件进行操作1&#xff09;只读文件操作read()readlines()readline()seek() 2&#xff09;只写文件操作3&#xff09;文件追加操作读写、追加读写操作1. r 模式打开文件2. w 模式打开文件3. a 模式打开文件 以二进制的形…

UDP客户端和服务器

UDP客户端&#xff0c;也就是首先主动发送数据的一方&#xff0c;也就是发起服务请求的一方。 UDP服务器&#xff0c;也就是首先等待接收数据&#xff0c;并对接收的数据进行处理&#xff0c;返回计算结果的一方&#xff0c;也就是提供服务的一方。 在下面实验中使用到的函数 …

Linux进度条

Linux进度条 一.基本概念1.回车和换行2.缓冲区2.实现倒计时 二.进度条 一.基本概念 1.回车和换行 回车&#xff1a;指光标移到该行的起始位置&#xff08;\r&#xff09;。 换行&#xff1a;换到下一行&#xff08;\n&#xff09;。 在c语音里\n将回车和换行相结合了。 2.缓冲…

存在CSRF漏洞的CMS练习

前言 作者简介&#xff1a;不知名白帽&#xff0c;网络安全学习者。 博客主页&#xff1a;不知名白帽的博客_CSDN博客-网络安全,CTF,内网渗透领域博主 网络安全交流社区&#xff1a;https://bbs.csdn.net/forums/angluoanquan CMS 链接&#xff1a;https://pan.baidu.com/s/13F…

Windows操作系统安全加固

Windows操作系统安全加固 一、安全加固基本思路1.1、安全基线1.2、系统信息审查 二、Windows安全配置加固2.1、漏洞修复——补丁安装2.2、漏洞修复——端口封禁2.2.1、windows高危端口加固实践——封禁135端口对外开放 2.3、安全配置加固——账号口令 一、安全加固基本思路 1.…

LinuxI2C应用编程——访问EEPROM

文章目录 介绍读芯片手册代码编译运行 阅读博文&#xff1a;LinuxI2C应用编程——I2C-Tools的使用 介绍 EEPROM (Electrically Erasable Programmable read only memory)&#xff0c;指带电可擦可编程只读存储器。是一种掉电后数据不丢失的存储芯片。 读芯片手册 首先按如图…

cmake操作目录

目录 cmake如何使用子目录 demo cmake生成build目录结构 如果指定子目录编译文件名字(binaryDir) 如果指定子目录编译的路径(binaryDir) 子目录相关的作用域 demo 子目录中定义project cmake如何使用子目录 如果项目比较小的话,我们将所有源码文件放到一个目录里面是没…

java环境搭建2-idea安装激活

windows环境装Java开发环境与idea安装激活 安装jdk安装idea激活idea新建项目开启Java学习 java环境搭建2-idea安装激活 之前安装了wslLinux子环境的Java开发环境,但是再许多地方没有人使用vscode进行Java开发,因为环境配置很麻烦,还有各种插件. windows环境装Java开发环境与ide…

django-vue-admin curd_demo 快速crud教程

django-vue-admin curd_demo 快速crud教程 快速CRUD开发教程&#xff1a;https://bbs.django-vue-admin.com/article/9.html 如何在 env.py 文件配置Mysql数据库&#xff1a;https://bbs.django-vue-admin.com/question/4.html 导入导出配置教程&#xff1a;https://bbs.djang…

机器学习总览

机器学习 1.什么是机器学习&#xff1f; 机器学习是使计算机像人类一样学习与行动的科学&#xff0c;并通过观察与现实世界交互的形式向计算机提供数据和信息&#xff0c;从而随着时间的推移以自主的方式改善其学习。 通过经验提高某些任务性能的计算机程序。 人工智能>机器…

人工智能与Chat GPT

一本书全面掌握ChatGPT&#xff0c;既有向ChatGPT提问的技巧&#xff0c; 也有构建自己的ChatGPT模型的方法&#xff0c;涵盖开发背景、关联技术、使用方法、应用形式、实用案例等 人工智能是我们这个时代最热门的话题&#xff0c;人们既希望它能代替我们做一些工作&#xff0c…

tecplot360 只显示指定phase的设定体积分数的区域

tecplot360 只显示指定phase的设定体积分数的区域 到数入据抽取切面设定显示体积分数范围 参考1&#xff1a; Tecplot中如何提取水线面&#xff08;自由表面&#xff09;并绘图 参考2&#xff1a; 两相流计算中&#xff0c;如何用Tecplot提取水相断面平均物理量&#xff1f; …

HTTP 协议的基本格式

目录 1.基本格式 首行 请求报头 关于cookie 关于Referer 响应的报文 首行 关于状态码 1.基本格式 让我们来看看fiddler抓包的下的实际报文情况 首行 在http1.1中&#xff0c;有如下方法 POST、GET、HEAD、PUT、OPTIONS、DELETE、TRACE、CONNECT 在我们抓包遇到的环境中&…