% 读入原始图像 I = imread('D:\课设图片\1.jpg'); subplot(331),imshow(I),title('原图'); % 对图像进行二值化处理 I1 = im2bw(I, 0.6); subplot(332),imshow(I1),title('二值化'); % 灰度处理 img1 = rgb2gray(I); % RGB图像转灰度图像 subplot(333),imshow(img1),title('灰度图像'); subplot(334),imhist(img1),title('灰度处理后的灰度直方图'); % 对二值化后的图像进行形态学处理 se = strel('disk', 5); I2 = imclose(I1, se); I3 = imopen(I2, se); I4 = imopen(I3, se); subplot(335),imshow(I4),title('形态学处理'); % 边缘提取 img4 = edge(I4, 'roberts', 0.15, 'both'); subplot(336),imshow(img4),title('roberts算子边缘检测'); % 对处理后的图像进行连通域分析 L = bwlabel(I4); STATS = regionprops(L, 'all'); % 筛选面积在1500到4800的连通域 for i = 1:length(STATS) if (STATS(i).Area < 1300 || STATS(i).Area > 3200) L(L == i) = 0; end end % 在原图上显示选取的连通域边缘 BW = edge(L, 'Canny'); RGB = imoverlay(I, BW, [1 0 0]); subplot(337),imshow(RGB),title('结果图');分析

时间: 2024-02-06 08:03:16 浏览: 34
这段代码是一段基于 MATLAB 的图像处理程序,主要功能是对一张图片进行处理,包括二值化、灰度处理、形态学处理、边缘提取和连通域分析等。 首先将原始图像进行二值化处理,将图像处理成只有黑白两种颜色的图像。接着进行灰度处理,将RGB图像转换成灰度图像,并显示灰度处理后的灰度直方图。然后进行形态学处理,通过对二值化后的图像进行闭运算和开运算,去除图像中的噪点和干扰,使图像更加清晰。接着进行边缘提取,使用 Roberts 算子进行边缘检测。最后进行连通域分析,筛选出面积在一定范围内的连通域,并在原图上显示选取的连通域边缘。最终得到的结果图能够更加清晰地显示出图像中物体的轮廓和边缘。
相关问题

将检测到的目标区域提取出来,修改代码:%% 读入原始图像 I = imread('瑕疵图像2.png'); %% 灰度化处理 I_gray = rgb2gray(I); %% 边缘检测 % 首先对图像进行高斯滤波,以去除噪声 sigma = 1; % 高斯核标准差 kernel_size = 3; % 高斯核大小 I_blurred = imgaussfilt(I_gray, sigma, 'FilterSize', kernel_size); % 然后使用Canny算法进行边缘检测 threshold_low = 0.1; % 低阈值 threshold_high = 0.4; % 高阈值 I_edges = edge(I_blurred, 'Canny', [threshold_low, threshold_high]); %% 目标提取 % 根据边缘信息提取目标区域 % 这里采用连通域分析方法,将相邻的边缘点划分到同一连通域内 % 然后根据连通域面积大小筛选出目标区域 connectivity = 8; % 连通域个数 CC = bwconncomp(I_edges, connectivity); % 连通域分析 numPixels = cellfun(@numel, CC.PixelIdxList); % 计算每个连通域的像素数 [~, idx] = max(numPixels); % 找到像素数最多的连通域 I_target = false(size(I_edges)); % 初始化目标区域 I_target(CC.PixelIdxList{idx}) = true; % 将目标连通域标记为true %% 显示结果 imshow(I); % 显示原始图像 hold on; visboundaries(I_target, 'Color', 'r'); % 在原始图像上绘制目标区域边界

%% 读入原始图像 I = imread('瑕疵图像2.png'); %% 灰度化处理 I_gray = rgb2gray(I); %% 边缘检测 % 首先对图像进行高斯滤波,以去除噪声 sigma = 1; % 高斯核标准差 kernel_size = 3; % 高斯核大小 I_blurred = imgaussfilt(I_gray, sigma, 'FilterSize', kernel_size); % 然后使用Canny算法进行边缘检测 threshold_low = 0.1; % 低阈值 threshold_high = 0.4; % 高阈值 I_edges = edge(I_blurred, 'Canny', [threshold_low, threshold_high]); %% 目标提取 % 根据边缘信息提取目标区域 % 这里采用连通域分析方法,将相邻的边缘点划分到同一连通域内 % 然后根据连通域面积大小筛选出目标区域 connectivity = 8; % 连通域个数 CC = bwconncomp(I_edges, connectivity); % 连通域分析 numPixels = cellfun(@numel, CC.PixelIdxList); % 计算每个连通域的像素数 [~, idx] = max(numPixels); % 找到像素数最多的连通域 I_target = false(size(I_edges)); % 初始化目标区域 I_target(CC.PixelIdxList{idx}) = true; % 将目标连通域标记为true %% 显示结果 figure; subplot(1,2,1);imshow(I);title('原始图像'); subplot(1,2,2);imshow(I_edges);title('边缘检测结果'); figure; imshow(I); % 显示原始图像 hold on; visboundaries(I_target, 'Color', 'r'); % 在原始图像上绘制目标区域边界 title('目标区域提取结果');

修改代码,不需要在原始图像上绘制出来,怎样修改%% 读入原始图像 I = imread('瑕疵图像2.png'); %% 灰度化处理 I_gray = rgb2gray(I); %% 边缘检测 % 首先对图像进行高斯滤波,以去除噪声 sigma = 1; % 高斯核标准差 kernel_size = 3; % 高斯核大小 I_blurred = imgaussfilt(I_gray, sigma, 'FilterSize', kernel_size); % 然后使用Canny算法进行边缘检测 threshold_low = 0.1; % 低阈值 threshold_high = 0.4; % 高阈值 I_edges = edge(I_blurred, 'Canny', [threshold_low, threshold_high]); %% 目标提取 % 根据边缘信息提取目标区域 % 这里采用连通域分析方法,将相邻的边缘点划分到同一连通域内 % 然后根据连通域面积大小筛选出目标区域 connectivity = 8; % 连通域个数 CC = bwconncomp(I_edges, connectivity); % 连通域分析 numPixels = cellfun(@numel, CC.PixelIdxList); % 计算每个连通域的像素数 [~, idx] = max(numPixels); % 找到像素数最多的连通域 I_target = false(size(I_edges)); % 初始化目标区域 I_target(CC.PixelIdxList{idx}) = true; % 将目标连通域标记为true %% 显示结果 figure; subplot(1,2,1);imshow(I);title('原始图像'); subplot(1,2,2);imshow(I_edges);title('边缘检测结果'); figure; imshow(I); % 显示原始图像 hold on; visboundaries(I_target, 'Color', 'r'); % 在原始图像上绘制目标区域边界 title('目标区域提取结果');

%% 读入原始图像 I = imread('瑕疵图像2.png'); %% 灰度化处理 I_gray = rgb2gray(I); %% 边缘检测 % 首先对图像进行高斯滤波,以去除噪声 sigma = 1; % 高斯核标准差 kernel_size = 3; % 高斯核大小 I_blurred = imgaussfilt(I_gray, sigma, 'FilterSize', kernel_size); % 然后使用Canny算法进行边缘检测 threshold_low = 0.1; % 低阈值 threshold_high = 0.4; % 高阈值 I_edges = edge(I_blurred, 'Canny', [threshold_low, threshold_high]); %% 目标提取 % 根据边缘信息提取目标区域 % 这里采用连通域分析方法,将相邻的边缘点划分到同一连通域内 % 然后根据连通域面积大小筛选出目标区域 connectivity = 8; % 连通域个数 CC = bwconncomp(I_edges, connectivity); % 连通域分析 numPixels = cellfun(@numel, CC.PixelIdxList); % 计算每个连通域的像素数 [~, idx] = max(numPixels); % 找到像素数最多的连通域 I_target = false(size(I_edges)); % 初始化目标区域 I_target(CC.PixelIdxList{idx}) = true; % 将目标连通域标记为true %% 显示结果 figure; subplot(1,2,1);imshow(I);title('原始图像'); subplot(1,2,2);imshow(I_edges);title('边缘检测结果'); % 不在原始图像上绘制目标区域边界,直接显示目标区域二值图像 figure; imshow(I_target); title('目标区域提取结果');

相关推荐

最新推荐

recommend-type

rockyou.txt

rockyou
recommend-type

ASP+ACCESS网上人才信息管理系统(源代码+论文)【ASP】.zip

ASP+ACCESS网上人才信息管理系统(源代码+论文)【ASP】
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB结构体与对象编程:构建面向对象的应用程序,提升代码可维护性和可扩展性

![MATLAB结构体与对象编程:构建面向对象的应用程序,提升代码可维护性和可扩展性](https://picx.zhimg.com/80/v2-8132d9acfebe1c248865e24dc5445720_1440w.webp?source=1def8aca) # 1. MATLAB结构体基础** MATLAB结构体是一种数据结构,用于存储和组织相关数据。它由一系列域组成,每个域都有一个名称和一个值。结构体提供了对数据的灵活访问和管理,使其成为组织和处理复杂数据集的理想选择。 MATLAB中创建结构体非常简单,使用struct函数即可。例如: ```matlab myStruct
recommend-type

详细描述一下STM32F103C8T6怎么与DHT11连接

STM32F103C8T6可以通过单总线协议与DHT11连接。连接步骤如下: 1. 将DHT11的VCC引脚连接到STM32F103C8T6的5V电源引脚; 2. 将DHT11的GND引脚连接到STM32F103C8T6的GND引脚; 3. 将DHT11的DATA引脚连接到STM32F103C8T6的GPIO引脚,可以选择任一GPIO引脚,需要在程序中配置; 4. 在程序中初始化GPIO引脚,将其设为输出模式,并输出高电平,持续至少18ms,以激活DHT11; 5. 将GPIO引脚设为输入模式,等待DHT11响应,DHT11会先输出一个80us的低电平,然后输出一个80us的高电平,
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

MATLAB结构体与数据库交互:无缝连接数据存储与处理,实现数据管理自动化

![MATLAB结构体与数据库交互:无缝连接数据存储与处理,实现数据管理自动化](https://ww2.mathworks.cn/products/database/_jcr_content/mainParsys/band_1749659463_copy/mainParsys/columns_copy/6d5289a2-72ce-42a8-a475-d130cbebee2e/image_copy_2009912310.adapt.full.medium.jpg/1709291769739.jpg) # 1. MATLAB结构体与数据库交互概述** MATLAB结构体与数据库交互是一种强大的
recommend-type

Link your Unity

project to C# script in Visual Studio. Can you provide me with some guidance on this? Yes, I can definitely help you with that! To link your Unity project to C# script in Visual Studio, you first need to make sure that you have both Unity and Visual Studio installed on your computer. Then, you can