问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于图像形态学处理和Sobel边缘提取的鱼类结构提取方法

创作时间:
作者:
@小白创作中心

基于图像形态学处理和Sobel边缘提取的鱼类结构提取方法

引用
CSDN
1.
https://blog.csdn.net/Simuworld/article/details/144860841

本文介绍了一种基于图像形态学处理和Sobel边缘提取的鱼类结构提取方法。通过MATLAB实现,该方法能够有效地去除背景干扰,提取鱼类的轮廓和结构特征。

1. 算法仿真效果

使用MATLAB 2022a进行仿真的结果如下:

2. MATLAB程序

以下是实现该算法的MATLAB代码:

% 读取图片
I0 = imread('images\1.jpg');
I1 = I0;

% 提取鱼区域
% step1: 去除背景中的黑色字体
[R, C, K] = size(I0);
PIX = mean2(I1(500:R/4,500:C/4,1));

% 提取背景像素值范围
for i = 1:R
    for j = 1:C
        if I0(i,j,1) < 50 & I0(i,j,2) < 50 & I0(i,j,3) < 60 & i <= 0.35*R
           I1(i,j,1) = PIX;
           I1(i,j,2) = PIX;
           I1(i,j,3) = PIX;
        end
    end
end

for i = 1:10:R1-R2+1
    i
    idy  = 0;
    idx  = idx + 1;
    for j = 1:10:C1-C2+1
        idy  = idy + 1;
        tmp0         = tmp1(i:i+R2-1,j:j+C2-1);
        SAD(idx,idy) = mean2(tmp0-tmp2);
    end
end

[X,Y]=find(SAD==min(min(SAD)));
I2 = I1(10*X-100:min(10*X+R2+100,R1),10*Y-100:min(10*Y+C2+100,C1),:);
Xs = 10*X-100;
Xe = min(10*X+R2+100,R1);
Ys = 10*Y-100;
Ye = min(10*Y+C2+100,C1);

figure;
subplot(311);
imshow(I0);
subplot(312);
imshow(I1); 
subplot(313);
imshow(I2); 

save R1.mat I2 X Y Xs Xe Ys Ye

3. 算法概述

第一部分:鱼提取

首先通过像素判断去除鱼的背景因素,包括白色背景和蓝色字体背景。然后将提取的鱼进行颜色分解(RGB转HSV),使用S通道进行二值化处理(im2bw函数),并去除图像中的小噪声(bwareaopen函数)。接着进行填充处理,将鱼区域中的小空洞填充,并通过腐蚀操作消除边缘不平稳的部分,实现鱼的抠图。

第二部分:鱼边缘提取和记录计算

使用Sobel算子进行边缘提取(edge函数),提取鱼的边缘轮廓。然后定位边缘坐标点,首先确定鱼嘴巴上的点,根据鱼身体各部分比例依次提取其他点的位置。后续内容主要涉及坐标点坐标和距离的计算。

4. 部分参考文献

[1] 赵来刚,陈道炯.一种基于Sobel算子的新型边缘提取技术[J].机械与电子, 2011(2):59-61.DOI:10.3969/j.issn.1001-2257.2011.02.016.

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号