MATLAB实现CNN(卷积神经网络)图像边缘识别

MATLAB实现CNN(卷积神经网络)图像边缘识别

1.CNN(卷积神经网络)图像边缘识别

CNN(卷积神经网络)的图像边缘识别,核心是通过卷积层模拟视觉系统对边缘的感知,无需人工设计特征,实现自动、高效的边缘检测。

其原理是利用边缘对应的图像灰度突变特性,通过预设或学习的卷积核(如 Sobel、Prewitt 算子对应的卷积核,或模型自学习的特征核),与图像像素矩阵进行卷积运算,强化像素灰度差值大的区域(边缘),抑制灰度平缓区域。

卷积层的局部感受野仅关注相邻像素,配合权值共享降低计算量,能精准捕捉水平、垂直及倾斜边缘。相比传统手工设计算子,CNN 的边缘识别鲁棒性更强,可适应光照变化、轻微噪声,且能通过深层网络学习复杂边缘组合特征,广泛应用于图像分割、目标检测、图像修复等任务的预处理环节

2.MATLAB程序

Matlab 复制代码
% 清除环境
clc;close all;clear all;warning off;%清除变量

%% 1. 读取和预处理图像
% 

% 读取lena图像
if ~exist('lena512.bmp', 'file')
    % 如果文件不存在,创建一个示例图像或使用内置图像
    fprintf('lena512.bmp 未找到,使用内置图像...\n');
    img = imread('cameraman.tif');
    img = imresize(img, [512, 512]);
else
    img = imread('lena512.bmp');
end

% 如果图像是彩色的,转换为灰度图
if size(img, 3) == 3
    img = rgb2gray(img);
end

% 将图像转换为double类型并归一化到[0,1]
img = im2double(img);

% 显示原始图像
figure('Position', [100, 100, 1200, 400]);
subplot(1,3,1);
imshow(img);
title('原始图像');
colorbar;

%% 2. 准备训练数据 - 改进版本
fprintf('准备训练数据...\n');

% 使用Canny边缘检测生成更清晰的边缘标签
edge_label = edge(img, 'canny', [0.1, 0.2]);

% 将二值边缘转换为连续值,添加一些宽度
se = strel('disk', 1);
edge_thick = imdilate(edge_label, se);
edge_continuous = double(edge_thick);

% 显示边缘标签
subplot(1,3,2);
imshow(edge_continuous, []);
title('Canny边缘标签');
colorbar;

disp('加我q1579325979获取完整代码');
%% 3. 构建改进的CNN网络
fprintf('构建改进的CNN网络...\n');

% 更简单的网络结构,更适合边缘检测
layers = [
    % 输入层
    imageInputLayer([512 512 1], 'Name', 'input', 'Normalization', 'none')
    
%%
    
    % 自定义缩放层,将输出转换到[0,1]
    functionLayer(@(x) (x+1)/2, 'Name', 'scale_output')
    
    % 回归输出层
    regressionLayer('Name', 'output')
];

% 显示网络架构
analyzeNetwork(layers);

%% 4. 改进的训练策略
fprintf('设置改进的训练选项...\n');

% 使用更合适的训练选项
options = trainingOptions('adam', ...
    'InitialLearnRate', 0.01, ...  % 提高学习率
    'MaxEpochs', 100, ...         % 增加训练轮数
    'MiniBatchSize', 1, ...
    'Verbose', true, ...
    'Plots', 'training-progress', ...
    'Shuffle', 'every-epoch', ...
    'ExecutionEnvironment', 'auto', ...
    'GradientThreshold', 1, ...   % 防止梯度爆炸
    'LearnRateSchedule', 'piecewise', ...
    'LearnRateDropFactor', 0.5, ...
    'LearnRateDropPeriod', 30);

fprintf('开始训练改进的CNN网络...\n');

% 准备训练数据
inputData = reshape(img, [512, 512, 1, 1]);
targetData = reshape(edge_continuous, [512, 512, 1, 1]);

% 训练网络
net = trainNetwork(inputData, targetData, layers, options);

%% 5. 使用训练好的网络进行预测
fprintf('使用训练好的网络进行边缘检测...\n');

% 使用训练好的网络进行预测
predicted_edges = predict(net, inputData);

% 将预测结果重塑为图像格式
predicted_edges = reshape(predicted_edges, [512, 512]);

% 后处理:增强对比度
predicted_edges = imadjust(predicted_edges);

% 显示CNN预测结果
subplot(1,3,3);
imshow(predicted_edges, []);
title('CNN边缘检测结果');
colorbar;

%% 6. 结果比较和评估
fprintf('结果比较和评估...\n');

% 创建更详细的结果比较图
figure('Position', [100, 200, 1500, 500]);

% 原始图像
subplot(2,4,1);
imshow(img);
title('原始图像');
axis image;

% Canny边缘检测
subplot(2,4,2);
imshow(edge_continuous, []);
title('Canny边缘检测');
colorbar;
axis image;

% CNN边缘检测
subplot(2,4,3);
imshow(predicted_edges, []);
title('CNN边缘检测');
colorbar;
axis image;

% 二值化CNN边缘
subplot(2,4,4);
binary_cnn = predicted_edges > 0.5;
imshow(binary_cnn);
title('二值化CNN边缘');
axis image;

% 添加一些额外的可视化
% Sobel边缘检测对比
sobel_edges = edge(img, 'sobel');
subplot(2,4,5);
imshow(sobel_edges);
title('Sobel边缘检测');
axis image;

% Prewitt边缘检测对比
prewitt_edges = edge(img, 'prewitt');
subplot(2,4,6);
imshow(prewitt_edges);
title('Prewitt边缘检测');
axis image;

% Roberts边缘检测对比
roberts_edges = edge(img, 'roberts');
subplot(2,4,7);
imshow(roberts_edges);
title('Roberts边缘检测');
axis image;

% 原始图像与CNN边缘叠加
subplot(2,4,8);
imshow(img);
hold on;
vis_edges = predicted_edges > 0.3;
[bounds_y, bounds_x] = find(vis_edges);
plot(bounds_x, bounds_y, 'r.', 'MarkerSize', 1);
title('原始图像+CNN边缘');
axis image;
hold off;

%% 7. 性能评估
fprintf('性能评估...\n');

% 计算均方误差
mse = mean((edge_continuous(:) - predicted_edges(:)).^2);
fprintf('均方误差 (MSE): %.6f\n', mse);

% 计算与Canny边缘的相似度
correlation = corr2(edge_continuous, predicted_edges);
fprintf('与Canny边缘的相关系数: %.4f\n', correlation);

%% 8. 保存结果
fprintf('保存结果...\n');

% 保存训练好的网络
save('improved_edge_detection_cnn.mat', 'net');

% 保存边缘检测结果
imwrite(predicted_edges, 'improved_cnn_edge_detection.png');
imwrite(binary_cnn, 'improved_cnn_edge_binary.png');

%% 9. 替代方案:使用预训练网络进行特征提取
fprintf('\n尝试替代方案:使用预训练网络特征...\n');

% 如果自定义网络效果仍然不好,可以使用预训练网络
try
    % 加载预训练网络(如GoogLeNet)
    if ~exist('googlenet.mat', 'file')
        net_pretrained = googlenet;
    else
        net_pretrained = googlenet;
    end
    
    % 使用预训练网络进行特征提取
    layer = 'inception_3a-output';
    features = activations(net_pretrained, imresize(img, [224, 224]), layer);
    
    fprintf('预训练网络特征提取成功\n');
catch
    fprintf('预训练网络不可用,跳过此步骤\n');
end

fprintf('程序执行完成!\n');

%% 10. 提供多种边缘检测方法对比
fprintf('\n不同边缘检测方法对比:\n');

methods = {'sobel', 'prewitt', 'roberts', 'log', 'canny'};
figure('Position', [100, 200, 1500, 300]);

for i = 1:length(methods)
    subplot(1, length(methods)+1, i);
    method_edges = edge(img, methods{i});
    imshow(method_edges);
    title([methods{i} '边缘检测']);
end

subplot(1, length(methods)+1, length(methods)+1);
imshow(binary_cnn);
title('CNN边缘检测');

fprintf('\n所有处理完成!\n');

3.程序结果

4.代码、程序订制(MATLAB、Python) →QQ:1579325979

4.1 各类智能算法

|-----------|--------------------------------------|---------|----------|
| 中文名称 | 英文全称 | 缩写 | 出现年份 |
| 遗传算法 | Genetic Algorithm | GA | 1975 |
| 粒子群优化算法 | Particle Swarm Optimization | PSO | 1995 |
| 蚁群优化算法 | Ant Colony Optimization | ACO | 1992 |
| 模拟退火算法 | Simulated Annealing | SA | 1983 |
| 免疫优化算法 | Immune Optimization Algorithm | IA | 1986 |
| 贪婪算法 | Greedy Algorithm | - | 1970 |
| 差分进化算法 | Differential Evolution | DE | 1997 |
| 混合蛙跳算法 | Shuffled Frog Leaping Algorithm | SFLA | 2003 |
| 人工蜂群算法 | Artificial Bee Colony | ABC | 2005 |
| 人工鱼群算法 | Artificial Fish Swarm Algorithm | AFSA | 2002 |
| 萤火虫算法 | Glowworm Swarm Optimization | GSO | 2005 |
| 果蝇优化算法 | Fruit Fly Optimization Algorithm | FOA | 2011 |
| 布谷鸟搜索算法 | Cuckoo Search | CS | 2009 |
| 猴群算法 | Monkey Algorithm | MA | 2008 |
| 免疫网络算法 | Immune Network Algorithm | aiNet | 2000 |
| 水滴算法 | Intelligent Water Drops Algorithm | IWD | 2007 |
| 和声搜索算法 | Harmony Search | HS | 2001 |
| 克隆选择算法 | Clonal Selection Algorithm | CLONALG | 2000 |
| 禁忌搜索算法 | Tabu Search | TS | 1986 |
| 爬山算法 | Hill Climbing | HC | 1940 |
| 引力搜索算法 | Gravitational Search Algorithm | GSA | 2009 |
| 细菌觅食优化算法 | Bacterial Foraging Optimization | BFO | 2002 |
| 蝙蝠算法 | Bat Algorithm | BA | 2010 |
| 邻域搜索算法 | Neighborhood Search | NS | 1960 |
| 变邻域搜索算法 | Variable Neighborhood Search | VNS | 1997 |
| 蜜蜂交配优化算法 | Honey Bees Mating Optimization | HBMO | 2001 |
| 文化基因算法 | Memetic Algorithm | MA | 1989 |
| 烟花算法 | Fireworks Algorithm | FWA | 2010 |
| 思维进化算法 | Mind Evolutionary Algorithm | MEA | 1998 |
| 蜻蜓算法 | Dragonfly Algorithm | DA | 2016 |
| 虚拟力场算法 | Virtual Force Field Algorithm | VFF | 1989 |
| 遗传规划 | Genetic Programming | GP | 1992 |
| 鲸鱼优化算法 | Whale Optimization Algorithm | WOA | 2016 |
| 灰狼优化算法 | Grey Wolf Optimizer | GWO | 2014 |
| 狼群算法 | Wolf Pack Algorithm | WPA | 2007 |
| 鸡群优化算法 | Chicken Swarm Optimization | CSO | 2014 |
| 生物地理学优化算法 | Biogeography-Based Optimization | BBO | 2008 |
| 分布估计算法 | Estimation of Distribution Algorithm | EDA | 1996 |
| 帝国竞争算法 | Imperialist Competitive Algorithm | ICA | 2007 |
| 天牛须搜索算法 | Beetle Antennae Search Algorithm | BAS | 2017 |
| 头脑风暴优化算法 | Brain Storm Optimization | BSO | 2011 |
| 人工势场法 | Artificial Potential Field | APF | 1986 |
| 猫群算法 | Cat Swarm Optimization | CSO | 2006 |
| 蚁狮优化算法 | Ant Lion Optimizer | ALO | 2015 |
| 飞蛾火焰优化算法 | Moth-Flame Optimization | MFO | 2015 |
| 蘑菇繁殖优化算法 | Mushroom Reproduction Optimization | MRO | 2020 |
| 麻雀搜索算法 | Sparrow Search Algorithm | SSA | 2020 |
| 水波优化算法 | Water Wave Optimization | WWO | 2015 |
| 斑鬣狗优化算法 | Spotted Hyena Optimizer | SHO | 2017 |
| 雪融优化算法 | Snow Ablation Optimization | SAO | 2022 |
| 蝴蝶优化算法 | Butterfly Optimization Algorithm | BOA | 2019 |
| 磷虾群算法 | Krill Herd Algorithm | KHA | 2012 |
| 黏菌算法 | Slime Mould Algorithm | SMA | 2020 |
| 人类学习优化算法 | Human Learning Optimization | HLO | 2014 |
| 母亲优化算法 | Mother Optimization Algorithm | MOA | 2023 |

4.2各类优化问题

|---------------|------------|
| 各种优化课题 | 各种优化课题 |
| 车间调度 | 路由路网优化 |
| 机场调度 | 顺序约束项目调度 |
| 工程项目调度 | 双层规划 |
| 港口调度 | 零件拆卸装配问题优化 |
| 生产线平衡问题 | 水资源调度 |
| 用电调度 | 库位优化 |
| 公交车发车调度 | 库位路线优化 |
| 车辆路径物流配送优化 | 武器分配优化 |
| 选址配送优化 | 覆盖问题优化 |
| 物流公铁水问题优化 | 管网问题优化 |
| 供应链、生产计划、库存优化 | PID优化 |
| 库位优化、货位优化 | VMD优化 |

4.3各类神经网络、深度学习、机器学习

|--------|----------------------|--------------|-------------|
| 序号 | 模型名称 | 核心特点 | 适用场景 |
| 1 | BiLSTM 双向长短时记忆神经网络分类 | 双向捕捉序列上下文信息 | 自然语言处理、语音识别 |
| 2 | BP 神经网络分类 | 误差反向传播训练 | 通用分类任务 |
| 3 | CNN 卷积神经网络分类 | 自动提取空间特征 | 图像、视频分类 |
| 4 | DBN 深度置信网络分类 | 多层受限玻尔兹曼机堆叠 | 特征学习、降维 |
| 5 | DELM 深度学习极限学习机分类 | 结合 ELM 与深度架构 | 复杂分类任务 |
| 6 | ELMAN 递归神经网络分类 | 含反馈连接的递归结构 | 时间序列、语音 |
| 7 | ELM 极限学习机分类 | 随机生成隐藏层,快速训练 | 小样本学习 |
| 8 | GRNN 广义回归神经网络分类 | 基于径向基函数回归 | 函数逼近、时间序列 |
| 9 | GRU 门控循环单元分类 | 门控机制简化 LSTM | 序列建模 |
| 10 | KELM 混合核极限学习机分类 | 结合多核 ELM | 高维复杂数据 |
| 11 | KNN 分类 | 基于距离的分类方法 | 模式识别 |
| 12 | LSSVM 最小二乘法支持向量机分类 | 最小二乘优化 SVM | 小样本分类 |
| 13 | LSTM 长短时记忆网络分类 | 门控机制处理长期依赖 | 语言建模 |
| 14 | MLP 全连接神经网络分类 | 多层感知机 | 通用分类 |
| 15 | PNN 概率神经网络分类 | 基于贝叶斯原理 | 模式识别 |
| 16 | RELM 鲁棒极限学习机分类 | 增强鲁棒性的 ELM | 噪声数据 |
| 17 | RF 随机森林分类 | 多棵决策树集成 | 高维、非线性数据 |
| 18 | SCN 随机配置网络模型分类 | 随机生成网络结构 | 快速训练 |
| 19 | SVM 支持向量机分类 | 寻找最优分类超平面 | 二分类、多分类 |
| 20 | XGBOOST 分类 | 梯度提升决策树 | 大规模结构化数据 |
| 21 | ANFIS 自适应模糊神经网络预测 | 融合模糊逻辑与神经网络 | 复杂非线性系统建模 |
| 22 | ANN 人工神经网络预测 | 多层神经元网络 | 通用预测任务 |
| 23 | ARMA 自回归滑动平均模型预测 | 线性时间序列建模 | 时间序列预测 |
| 24 | BF 粒子滤波预测 | 基于蒙特卡洛采样 | 动态系统状态估计 |
| 25 | BiLSTM 双向长短时记忆神经网络预测 | 双向捕捉序列信息 | 时间序列、文本预测 |
| 26 | BLS 宽度学习神经网络预测 | 增量学习结构 | 在线学习 |
| 27 | BP 神经网络预测 | 误差反向传播训练 | 通用预测 |
| 28 | CNN 卷积神经网络预测 | 自动特征提取 | 图像、视频预测 |
| 29 | DBN 深度置信网络预测 | 多层无监督预训练 | 特征学习预测 |
| 30 | DELM 深度学习极限学习机预测 | 结合 ELM 与深度结构 | 复杂预测任务 |
| 31 | DKELM 回归预测 | 动态核 ELM 回归 | 时间序列回归 |
| 32 | ELMAN 递归神经网络预测 | 递归结构处理时序 | 时间序列 |
| 33 | ELM 极限学习机预测 | 快速训练 | 小样本回归 |
| 34 | ESN 回声状态网络预测 | 储备池计算 | 时间序列预测 |
| 35 | FNN 前馈神经网络预测 | 前向传播 | 通用预测 |
| 36 | GMDN 预测 | 基因表达数据网络建模 | 生物信息学预测 |
| 37 | GMM 高斯混合模型预测 | 多高斯分布建模 | 密度估计、聚类 |
| 38 | GRNN 广义回归神经网络预测 | 径向基函数回归 | 函数逼近 |
| 39 | GRU 门控循环单元预测 | 门控机制简化 LSTM | 时间序列预测 |
| 40 | KELM 混合核极限学习机预测 | 多核 ELM 回归 | 高维回归 |
| 41 | LMS 最小均方算法预测 | 线性回归的迭代优化 | 自适应滤波 |
| 42 | LSSVM 最小二乘法支持向量机预测 | 最小二乘优化 SVM | 回归预测 |
| 43 | LSTM 长短时记忆网络预测 | 门控处理长期依赖 | 时间序列预测 |
| 44 | RBF 径向基函数神经网络预测 | 径向基函数逼近 | 函数拟合 |
| 45 | RELM 鲁棒极限学习机预测 | 增强鲁棒性的 ELM | 噪声数据回归 |
| 46 | RF 随机森林预测 | 决策树集成 | 回归预测 |
| 47 | RNN 循环神经网络预测 | 循环连接处理序列 | 时间序列预测 |
| 48 | RVM 相关向量机预测 | 稀疏贝叶斯学习 | 回归、分类 |
| 49 | SVM 支持向量机预测 | 寻找最优超平面 | 回归预测 |
| 50 | TCN 时间卷积神经网络预测 | 一维卷积处理时序 | 时间序列预测 |
| 51 | XGBoost 回归预测 | 梯度提升决策树 | 大规模回归 |

相关推荐
FJW0208142 小时前
Python函数
开发语言·python
屁股割了还要学2 小时前
【C++进阶】STL-string的简单实现
c语言·开发语言·数据结构·c++·学习·考研
superlls2 小时前
(Java基础)集合框架继承体系
java·开发语言
ad钙奶长高高2 小时前
【C语言】原码反码补码详解
c语言·开发语言
唔皇万睡万万睡3 小时前
基于模板匹配的数字和大写字母识别(Matlab)
图像处理·人工智能·机器学习·计算机视觉·matlab
IoT智慧学堂3 小时前
C语言运算符与表达式详解——算术、逻辑与赋值的全面理解
c语言·开发语言
沐知全栈开发3 小时前
深度优先遍历与连通分量
开发语言
古城小栈3 小时前
Go 1.25 发布:性能、工具与生态的全面进化
开发语言·后端·golang