一、简介

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==0circlenumber=circlenumber+1;for i=2:c-1     %求出各个输出的值for j=2:d-1if x(i,j)>=1      %求f(x(i,j))的值,设置为f(i,j)f(i,j)=1;     %表示正向稳定时,取白色elseif x(i,j)<=-1f(i,j)=-1;    %表示负向稳定时,取黑色elsef(i,j)=x(i,j);%未稳定时,将状态直接输出endy(i,j)=f(i,j);        %无论是否稳定,都将结果先直接输出endend%其中边界条件是在图像外面的像素都设置为0;%这里是将上面两行,下面两行,还有左右两行都设置成边界%正式的处理单元是中间2到257行和2到257列的部分for i=2:c-1for j=2:d-1xn(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的公式,详见《细胞网络神经动力学》p5endend%以下判断是不是已经全部收敛了,如果全部收敛了,就置judge=1judge=1;for i=2:c-1for j=2:d-1if abs(xn(i,j))<1judge = 0;endendend%以下将xn(i,j)赋值给状态x(i,j)for i=2:c-1for j=2:d-1x(i,j)=xn(i,j);endend
end%接下去跳出wile循环,表示已经稳定了
%以下进行边缘的确定,f(i,j)=1对应的像素值设为1,
%f(i,j)=-1对应的像素值设为0
a=zeros(c,d);
for i=2:c-1for j=2:d-1if x(i,j)>=1a(i,j)=1;elseif x(i,j)<=-1a(i,j)=0;endend
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)

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

  1. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  2. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  3. 【Matlab车牌识别】停车计费系统【含GUI源码 735期】

    一.代码运行视频(哔哩哔哩) [Matlab车牌识别]停车计费系统[含GUI源码 735期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLA ...

  4. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

  5. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...

  6. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  7. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  8. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

  9. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

  10. 【Matlab语音加密】语音信号加密解密(带面板)【含GUI源码 181期】

    一.代码运行视频(哔哩哔哩) [Matlab语音加密]语音信号加密解密(带面板)[含GUI源码 181期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆 ...

最新文章

  1. MyEclipse2014配置Tomcat开发JavaWeb程序JSP以及Servlet
  2. 高精度加减法 1000阶乘求法
  3. SpringMVC_1.认识MVC
  4. 《Adobe After Effects CS6完全剖析》——动画:最重要的是关系
  5. 黄金分割小数点后100位小数的c语言编程,黄金分割数小数点后100位
  6. c++矩阵连乘的动态规划算法并输出_你在Java中用过动态规划吗?
  7. Windows中的进程和线程
  8. Linux 查看端口状态 netstat
  9. Fineui 添加打印控件
  10. windows10下Qt安装及OpenCV配置
  11. java枚举构造器_java枚举类的构造函数实例详解
  12. Palantir分析:「商业模式画布」、「SWOT」、「垄断特征」、以及「7个商业模式」
  13. 面试宝典(一) - 让你不再错过“金九银十“的求职浪潮之简历包装篇
  14. JNI_OnLoad 回调Java_Java本地接口(JNI)编程指南和规范(第八章)
  15. 写一副对子_一副对子的传奇故事
  16. JavaScript动态向表格添加数据
  17. 关于LINUX系统netterm终端登陆乱码问题。
  18. 微擎微信小程序 吃客部族微信小程序V2.3.1 前端开发+后端开发
  19. android 授予root权限,关于android手机获得ROOT权限问题
  20. Delphi XE8 用HttpClient下载文件

热门文章

  1. D 洛谷 P3602 Koishi Loves Segments [贪心 树状数组+堆]
  2. 深入理解计算机系统总结
  3. OpenGL ES着色器语言之变量和数据类型(一)(官方文档第四章)和varying,uniform,attribute修饰范围...
  4. jdk的wsimport方法实现webservice客户端调用服务
  5. 打开WORD 2003时提示发现错误,需要关闭,还要发送错误报告给Microsoft 解决方案...
  6. 关于自定义通知事件的跨线程问题
  7. 第五章 线性回归 学习笔记上
  8. 181110每日一句
  9. 永远不要低估自己,love your fear.
  10. Atitit 浏览器tech原理与概论 目录 1. 浏览器概述 1 1.1. 浏览器野史 UserAgent列传 1 1.2. 浏览器趋势 1 1.3. 浏览器大战 1 1.4. 三次浏览器大战 2