【图像边缘检测】基于matlab CNN灰度图像边缘提取【含Matlab源码 490期】

举报
海神之光 发表于 2022/05/29 03:55:40 2022/05/29
【摘要】 一、简介 0 前言 边缘检测是图像处理中最古老和最基本的问题之一。灰度 边缘检测算法的发展时间较长, 算法较多。基于梯度的边缘检 测算子最早出现, 基于优化目标函数的方法, Canny算子被广泛使用。另...

一、简介

0 前言
边缘检测是图像处理中最古老和最基本的问题之一。灰度 边缘检测算法的发展时间较长, 算法较多。基于梯度的边缘检 测算子最早出现, 基于优化目标函数的方法, Canny算子被广泛使用。另外还有基于其它技术的边缘检测方法, 如多尺度方法、统计过程、曲面拟和和支持向量等。 近年来, 由于数字彩色图像的广泛运用, 使彩色数字图像处理技术日益受到关注。现有的一些彩色图像边缘检测方法中, 有相当部分是灰度图像边缘检测的推广, 也即首先基于某一彩色分量红® 、绿(G) 或蓝(B) 的图像进行灰度图像边缘 检测, 然后再将每一独立分量的边缘图联合形成彩色图像的边缘。这些方法忽略了人眼对颜色的视觉感知, 没有考虑各颜色分量之间的联系, 往往得不到好的边缘检测效果。而基于彩色空间的边缘检测方法可以充分利用彩色图像中携带的彩色信息。为了充分考虑人眼对不同颜色感知程度的不同, 同时克服彩色空间角向量距离计算复杂的缺点, 本文使用彩色空间 Mahalanobis 距离作为彩色象素之间差异的度量。 所有的常规边缘提取方法输出结果都是二值图像。因此, 提取的边缘丢失了许多重要的信息, 尤其体现在有丰富细节和 微小变化的区域。为了解决这个问题, 利用细胞神经网络 (CNN) 多值输出的特点来进行彩色图像边缘检测。

1 细胞神经网络(CNN)
美国科学家 L.O.Chua 等人 1988 年提出的细胞神经网络 (CNN) 。由于其具有可并行计算、便于硬件实现等特性, 故它比传统方法有更大的潜力。 CNN的数学描述如下:
在这里插入图片描述
2 彩色空间
2.1 RGB 彩色空间
RGB( 红、绿、蓝) 是众多彩色空间的一种。由于红、绿、蓝三个通道里的灰阶值各自独立控制红、绿、蓝三种颜色的亮度, 形成数学上的一个三维空间。记录及显示彩色图像时, RGB是最常见的一种方案。因为彩色图像有三个分量, 彩色象素实际上是向量。在RGB 系统中, 每个彩色点都会在 RGB 坐标系中作为一个从原点延伸到那一点的向量来描述。 令c 代表 RGB 彩色空间中的任意向量:
在这里插入图片描述
该公式表明 c 的分量是一幅彩色图像在一个点上的 RGB 分量。彩色分量是坐标( x, y) 的函数, 表示为:
在这里插入图片描述
对一个大小为 M×N 的图像来说, 有 MN 个这样的向量, 其 中, x=0, 1, 2, …, M- 1 和 y=0, 1, 2, …, N- 1。
2.2 Mahalanobis距离
为了度量象素之间的差异, 有一个相似性度量是必要的。 最简单的度量之一是欧几里得距离。令z代表RGB空间中的 任意点, 如果它们之间的距离小于特定的阈值 D0, 则 z 与 a 是 相似的, z和a间的欧氏距离由下式给出:
在这里插入图片描述
这里下标 R, G, B 表示向量 a 和 z 的 RGB 分量。D( z, a) ≤D0 的点的轨道是半径为 D0 的实心球。包含在球内部和表面上的 点符合特定的彩色准则; 球外面上的点则不符合准则。 上式一个有用的推广是如下形式的距离测度:
在这里插入图片描述
这里 C 是一个实对角阵, 主对角线上的元素起到对各个维度 加权的作用。该距离称为 Mahalanobis 距离。D( z, a) ≤D0 的点的轨道描述了一个实心的三维椭球体, 其主轴取在最大的数据扩展方向上。当 C 等于单位矩阵 I 时, Mahalanobis 距离约简为欧几里得距离。

2.3 视见函数
人眼对各种不同波长的光有不同的灵敏度, 为了研究客观 辐射通量对人眼引起的主观感觉的强度之间的关系, 首先必须 了解人眼对各种波长光的灵敏度。但是, 辐射通量使人眼产生 亮暗感觉的程度是无法作出定量比较的, 幸好人的视觉能相当 精确地判断两种颜色光的亮暗感觉是否相同, 所以确定人眼的 光谱响应可将各种波长的光引起相同亮暗感觉所需要的辐射 通量进行比较, 对大量具有正常视力的观察者所做的实验表 明, 在比较明亮的环境, 人眼视觉对 λ=555 nm 左右的黄绿光最 敏感。设任何一种波长为 λ的光和 λ=555 nm 的黄绿光产生同 样亮暗感觉所需的辐射通量分别为 P! 和 P555 , 比值 V( !) =P555 / P! 就称为人眼视见函数。 各色光在人眼视觉上所引起的视见程度不同。在明亮环境 下, 人眼对波长为 555 nm 的黄绿光最敏感。而对红光和紫光的 敏感度最低。在阴暗环境下, 人眼对波长约为 510 nm 的绿光最 敏感, 对红光和紫光的敏感度最低。
在这里插入图片描述

二、部分源代码

%文件名称:  CNN_Edge_extraction.m
%文件描述:  基于CNN的灰度图像边缘提取的程序
%%参考文献: 《基于细胞神经网络的图像边缘提取算法研究》
%             

clear;
clc;

I=imread('C:\Users\lenovo\Desktop\d083bc186611b136d0e72beeccee8850\CNN边缘检测\lena.jpg');
[c,d]=size(I);
x=zeros(c,d);

for i=1:c;
    for j=1:d;
        n(i,j)=double(I(i,j))/255;
        s(i,j)=2*(n(i,j)-0.5);
    end
end
A=[0 0 0;
   0 1.600 0;
   0 0 0];
B=[-1.004 -1.004 -1.004;
   -1.004 10.000 -1.004;
   -1.004 -1.004 -1.004];
z=-1.405;

% A=[0 0 0;
%    0 2 0;
%    0 0 0];
% B=[-1 -1 -1;
%    -1  8 -1;
%    -1 -1 -1];
% z=-0.5;

% A=[0 0 0;
%    0 9.926055 0;
%    0 0 0];
% B=[-1.124332 -1.124332 -1.124332;
%    -1.124332  9.670411 -1.124332;
%    -1.124332 -1.124332 -1.124332];
% z=-1.915585;

circlenumber=0; %circlenumber是细胞神经网络要循环的次数
judge=0;        %judge是判断网络稳定的标志,
                %0是网络未达到稳定的标志,
                %1表示网络已经稳定了

%当所有的状态x(i,j)的绝对值都大于1的时候,就认为网络趋于稳定
%下面是计算过程,直接迭代到完全收敛
while judge==0
    circlenumber=circlenumber+1;
    for i=2:c-1     %求出各个输出的值
        for j=2:d-1
            if x(i,j)>=1      %f(x(i,j))的值,设置为f(i,j)
                f(i,j)=1;     %表示正向稳定时,取白色
            elseif x(i,j)<=-1
                f(i,j)=-1;    %表示负向稳定时,取黑色
            else
                f(i,j)=x(i,j);%未稳定时,将状态直接输出
            end
        y(i,j)=f(i,j);        %无论是否稳定,都将结果先直接输出
        end
    end
    %其中边界条件是在图像外面的像素都设置为0%这里是将上面两行,下面两行,还有左右两行都设置成边界
    %正式的处理单元是中间2257行和2257列的部分
    for i=2:c-1
        for j=2:d-1
            xn(i,j)=z+A(2,2)*y(i,j)+B(2,2)*s(i,j)+B(1,1)*s(i-1,j-1)...
            +B(1,2)*s(i-1,j)+B(1,3)*s(i-1,j+1)+B(2,1)*s(i,j-1)+B(2,3)...
            *s(i,j+1)+B(3,1)*s(i+1,j-1)+B(3,2)*s(i+1,j)+B(3,3)*s(i+1,j+1);
            %以上语句对应于CNN的公式,详见《细胞网络神经动力学》p5
        end
    end
    %以下判断是不是已经全部收敛了,如果全部收敛了,就置judge=1
    judge=1;
    for i=2:c-1
        for j=2:d-1
            if abs(xn(i,j))<1
                judge = 0;
            end
        end
    end
    %以下将xn(i,j)赋值给状态x(i,j)
    for i=2:c-1
        for j=2:d-1
            x(i,j)=xn(i,j);
        end
    end
end


%接下去跳出wile循环,表示已经稳定了
%以下进行边缘的确定,f(i,j)=1对应的像素值设为1%f(i,j)=-1对应的像素值设为0
a=zeros(c,d);
for i=2:c-1
    for j=2:d-1
        if x(i,j)>=1
            a(i,j)=1;
        elseif x(i,j)<=-1
            a(i,j)=0;
        end
    end
end

%以下输出原始图像和边缘图像a
figure(1);imshow(I);
title('原始图像');
%以下输出y(i,j)状态图
figure(2);
imshow(a);
title('lena的CNN状态图');
imwrite(a,'lena_cnn.png','png');

三、运行结果

在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]张闯,迟健男,张朝晖,姜庆玲,王志良.一种基于CNN的彩色图像边缘检测算法[J].计算机工程与应用. 2008,(21)

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/114643591

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。