丰富一下下列代码,将函数的底层运算显示出来:% 读入原始图像 I = imread('瑕疵图像.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.9; % 高阈值 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_target); title('提取结果');
时间: 2023-08-05 08:02:04 浏览: 76
% 读入原始图像
I = imread('瑕疵图像.png');
% 灰度化处理
I_gray = rgb2gray(I);
% 边缘检测
% 高斯滤波,以去除噪声
sigma = 1; % 高斯核标准差
kernel_size = 3; % 高斯核大小
I_blurred = imgaussfilt(I_gray, sigma, 'FilterSize', kernel_size);
% Canny算法
% 计算梯度图像,得到边缘强度和方向
[Gx, Gy] = imgradientxy(I_blurred,'sobel');
% 计算边缘梯度和方向
[Gmag, Gdir] = imgradient(Gx, Gy);
% 应用非最大抑制,将边缘细化
I_thin = imhmax(Gmag, 0);
I_nms = imnonmaxsup(I_thin, Gdir, 180);
% 双阈值处理,确定强边缘和弱边缘
threshold_low = 0.1; % 低阈值
threshold_high = 0.9; % 高阈值
I_strong = I_nms > threshold_high * max(I_nms(:)); % 强边缘
I_weak = (I_nms >= threshold_low * max(I_nms(:))) & (I_nms < threshold_high * max(I_nms(:))); % 弱边缘
% 使用连接弱边缘的方法,增强弱边缘
I_strong = bwmorph(I_strong, 'bridge');
I_edges = bwmorph(I_strong | I_weak, 'thin', Inf);
% 目标提取
% 根据边缘信息提取目标区域
% 这里采用连通域分析方法,将相邻的边缘点划分到同一连通域内
% 然后根据连通域面积大小筛选出目标区域
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(2,3,1);
imshow(I);
title('原始图像');
subplot(2,3,2);
imshow(I_gray);
title('灰度图像');
subplot(2,3,3);
imshow(I_blurred);
title('高斯滤波后的图像');
subplot(2,3,4);
imshow(Gmag);
title('梯度幅值图像');
subplot(2,3,5);
imshow(I_nms);
title('非最大抑制后的图像');
subplot(2,3,6);
imshow(I_target);
title('提取结果');
% 注释
% I:原始图像
% I_gray:灰度化处理后的图像
% I_blurred:高斯滤波后的图像
% Gx, Gy:x方向和y方向的梯度图像
% Gmag:梯度幅值图像
% Gdir:梯度方向图像
% I_thin:细化后的梯度图像
% I_nms:非最大抑制后的图像
% I_strong:强边缘
% I_weak:弱边缘
% I_edges:连接弱边缘后的边缘图像
% CC:连通域分析结果
% numPixels:每个连通域的像素数
% idx:像素数最多的连通域的索引
% I_target:目标区域的二值图像
阅读全文