数字图像处理(三)

news/2024/11/17 21:46:46/

目录

实验六、图像分割方法

 实验七、图像识别与分类


实验六、图像分割方法

一、实验目的

  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)]);

 

 

 

 

 

 


http://www.ppmy.cn/news/471267.html

相关文章

作为超级自动化的重要先驱,流程挖掘正在成为组织运营标配

正在成为组织运营标配的流程挖掘&#xff0c;到底有哪些商业价值&#xff1f; 作为超级自动化的重要先驱&#xff0c;流程挖掘正在成为组织运营标配 文/王吉伟 AIGC正在影响越来越多的行业&#xff0c;流程挖掘领域亦不例外。 Mindzie首先宣布集成生成式AI&#xff0c;使用户…

【0211】tcpdump抓包分析pg_hba.conf以password作为认证证方式下frontend与Backend之间身份验证过程(13)

文章目录 1. 回顾2. pg_hba.conf为password,frontend与Backend如何进行验证2.1 身份认证过程1. 回顾 在前面的几篇文章中,详细讲解了PG数据库在 pg_hba.conf 认证方式为trust下的frontend与Backend进程之间的通信过程。结合抓包方式,分析了Backend进程向frontend、frontend…

[车联网安全自学篇] ATTACK安全之Frida反调试检测

也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 0x01 前言 在开始正式讲反调试之前,我们先来了解一些基础知识 1)什么是逆向?什么又是应用程序篡改技术? 逆向和篡改技术…

ios教程,用pc开发ios游戏

原文是Thomas Henshell对手机游戏Catch the Monkey的开发总结&#xff0c;由Lyra翻译。 传智播客今年6月开始ios培训&#xff08;http://ios.itcast.cn&#xff09;的课程&#xff1b;相对于一些应用&#xff0c;我本人对ios游戏开发更感兴趣&#xff0c;这些开发总结并不拘泥…

selenium自动化教程及使用java来爬取数据

目录 一、介绍二、下载浏览器驱动1.获取要下载的驱动版本号2.下载驱动 三、Maven如下四、简单使用五、定位器1.定位器2.说明(1) class name 定位器(2) css selector 定位器(3) id 定位器(4) name 定位器(5) link text 定位器(6) partial link text 定位器(7) tag 定位器(8) xpa…

MySQL存储引擎之Myisam和Innodb总结性梳理

Mysql有两种存储引擎&#xff1a;InnoDB与Myisam&#xff0c;下表是两种引擎的简单对比 MyISAM InnoDB 构成上的区别&#xff1a; 每个MyISAM在磁盘上存储成三个文件。第一个 文件的名字以表的名字开始&#xff0c;扩展名指出文件类型。.frm文件存储表定义。数据文件的扩 展…

Django生成接口文档

当我们使用Django开发Web应用的时候&#xff0c;API接口文档的编写是非常必要的。通常我们会使用Swagger、apidoc等工具来自动生成API文档。本文介绍如何使用Django Rest Framework自动生成接口文档。 安装Django Rest Framework 在项目中安装Django Rest Framework&#xff…

二、Docker安装

学习参考&#xff1a;尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 前言一、Docker安装1 确定Centos的版本2 卸载旧版本及前置安装2.1 卸载旧版本2.2 yum安装gcc 3 安装方法4 设置 Docker 的存储库并从中安装&#xff08;官网推荐安装方法&am…