
MATLAB如何提取图片中最红色的区域轮廓,希望可以通过该参数提取自己想要的颜色区域并将其他颜色轮廓去掉。
可以使用 MATLAB 中的颜色阈值和形态学操作来提取图片中最红色的区域轮廓。具体步骤如下:
img = imread('your_image.jpg');
imshow(img);
hsv_img = rgb2hsv(img);
% 定义红色范围的颜色阈值
h_min = 0.9; h_max = 0.05;
s_min = 0.6; s_max = 1.0;
v_min = 0.6; v_max = 1.0;
% 对 HSV 图像进行颜色阈值分割
red_mask = (hsv_img(:,:,1) < h_max) | (hsv_img(:,:,1) > h_min) & ...
(hsv_img(:,:,2) >= s_min) & (hsv_img(:,:,2) <= s_max) & ...
(hsv_img(:,:,3) >= v_min) & (hsv_img(:,:,3) <= v_max);
其中,h_min 和 h_max 定义了红色的 H 值范围,s_min 和 s_max 定义了红色的 S 值范围,v_min 和 v_max 定义了红色的 V 值范围。
% 定义形态学操作的结构元素
se = strel('disk', 5);
% 对二值化图像进行形态学操作
red_mask = imopen(red_mask, se);
red_mask = imclose(red_mask, se);
其中,strel('disk',5) 定义了一个半径为 5 的圆形结构元素。
% 提取红色区域的轮廓
red_contour = bwperim(red_mask);
% 在原图上显示红色区域的轮廓
imshow(img);
hold on;
visboundaries(red_contour, 'Color', 'r');
其中,bwperim 函数可以提取出二值图像的轮廓,visboundaries 函数可以在原图上显示轮廓。
完整代码如下:
img = imread('your_image.jpg');
imshow(img);
hsv_img = rgb2hsv(img);
h_min = 0.9; h_max = 0.05;
s_min = 0.6; s_max = 1.0;
v_min = 0.6; v_max = 1.0;
red_mask = (hsv_img(:,:,1) < h_max) | (hsv_img(:,:,1) > h_min) & ...
(hsv_img(:,:,2) >= s_min) & (hsv_img(:,:,2) <= s_max) & ...
(hsv_img(:,:,3) >= v_min) & (hsv_img(:,:,3) <= v_max);
se = strel('disk', 5);
red_mask = imopen(red_mask, se);
red_mask = imclose(red_mask, se);
red_contour = bwperim(red_mask);
imshow(img);
hold on;
visboundaries(red_contour, 'Color', 'r');