WU1468007 2023-05-16 16:47 采纳率: 0%
浏览 22

基于MATLAB的超分辨率图像重建SCRNN

怎么使用MATLAB完成,深度学习的超分辨率图像重建,我目前代码运行老是显示有问题。后续的目标是放入GUI按钮下,但是在单独运行的情况下也跑不出来。
同时也还有一个问题,如果要把深度学习的代码放入GUI可视化界面的话,需要新加一个按钮吗(实现神经网络训练)

代码1



I = im2double(I);      % 归一化处理
Y = rgb2ycbcr(I);      % 转换到YCbCr颜色空间
Y = Y(:,:,1);          % 提取Y通道
layers = [ ...
    imageInputLayer([64 64 1])
    convolution2dLayer(9,64,'Padding',[4 4])
    reluLayer()
    convolution2dLayer(1,32,'Padding',[0 0])
    reluLayer()
    convolution2dLayer(5,1,'Padding',[2 2])
];
net = trainNetwork(Y, layers);    % 训练神经网络
Y_resized = imresize(Y,4);         % 放大低分辨率图像
Y_pred = predict(net,Y_resized);   % 使用神经网络进行预测
Y_pred = squeeze(Y_pred);          % 删除单维度条目
Y_pred = im2uint8(Y_pred);         % 将预测结果转换为图像
I_pred = YCbCr2rgb(cat(3, Y_pred, imresize(Y,4,'CbCr','bicubic'))); % 将预测结果转换回RGB颜色空间

代码2

% 数据准备
imds = imageDatastore('data/train', 'IncludeSubfolders', true, 'FileExtensions', '.png', 'LabelSource', 'foldernames');
imds.ReadFcn = @(loc)imresize(imread(loc), [256, 256]);  % 图像统一缩放到256x256

[imdsTrain, imdsTest] = splitEachLabel(imds, 0.8, 'randomized');

% 网络设计
inputLayer = imageInputLayer([256, 256, 1]);
middleLayer1 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer1.BatchNormalization = true;
middleLayer1.Activation = 'relu';
middleLayer2 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer2.BatchNormalization = true;
middleLayer2.Activation = 'relu';
middleLayer3 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer3.BatchNormalization = true;
middleLayer3.Activation = 'relu';
middleLayer4 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer4.BatchNormalization = true;
middleLayer4.Activation = 'relu';
middleLayer5 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer5.BatchNormalization = true;
middleLayer5.Activation = 'relu';
middleLayer6 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer6.BatchNormalization = true;
middleLayer6.Activation = 'relu';
middleLayer7 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer7.BatchNormalization = true;
middleLayer7.Activation = 'relu';
middleLayer8 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer8.BatchNormalization = true;
middleLayer8.Activation = 'relu';
middleLayer9 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer9.BatchNormalization = true;
middleLayer9.Activation = 'relu';
middleLayer10 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer10.BatchNormalization = true;
middleLayer10.Activation = 'relu';
middleLayer11 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer11.BatchNormalization = true;
middleLayer11.Activation = 'relu';
middleLayer12 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer12.BatchNormalization = true;
middleLayer12.Activation = 'relu';
middleLayer13 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer13.BatchNormalization = true;
middleLayer13.Activation = 'relu';
middleLayer14 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer14.BatchNormalization = true;
middleLayer14.Activation = 'relu';
middleLayer15 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer15.BatchNormalization = true;
middleLayer15.Activation = 'relu';
middleLayer16 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer16.BatchNormalization = true;
middleLayer16.Activation = 'relu';
middleLayer17 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer17.BatchNormalization = true;
middleLayer17.Activation = 'relu';
middleLayer18 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer18.BatchNormalization = true;
middleLayer18.Activation = 'relu';
middleLayer19 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer19.BatchNormalization = true;
middleLayer19.Activation = 'relu';
middleLayer20 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer20.BatchNormalization = true;
middleLayer20.Activation = 'relu';
middleLayer21 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer21.BatchNormalization = true;
middleLayer21.Activation = 'relu';
middleLayer22 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer22.BatchNormalization = true;
middleLayer22.Activation = 'relu';
middleLayer23 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer23.BatchNormalization = true;
middleLayer23.Activation = 'relu';
middleLayer24 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer24.BatchNormalization = true;
middleLayer24.Activation = 'relu';
middleLayer25 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer25.BatchNormalization = true;
middleLayer25.Activation = 'relu';
middleLayer26 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer26.BatchNormalization = true;
middleLayer26.Activation = 'relu';
middleLayer27 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer27.BatchNormalization = true;
middleLayer27.Activation = 'relu';
middleLayer28 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer28.BatchNormalization = true;
middleLayer28.Activation = 'relu';
outputLayer = convolution2dLayer(3, 1, 'Padding', 'same');
outputLayer.Activation = 'tanh';
outputLayer.Scale = 25;

layers = [
    inputLayer
    middleLayer1
    middleLayer2
    middleLayer3
    middleLayer4
    middleLayer5
    middleLayer6
    middleLayer7
    middleLayer8
    middleLayer9
    middleLayer10
    middleLayer11
    middleLayer12
    middleLayer13
    middleLayer14
    middleLayer15
    middleLayer16
    middleLayer17
    middleLayer18
    middleLayer19
    middleLayer20
    middleLayer21
    middleLayer22
    middleLayer23
    middleLayer24
    middleLayer25
    middleLayer26
    middleLayer27
    middleLayer28
    outputLayer];

lgraph = layerGraph(layers);

% 网络训练
options = trainingOptions('adam', ...
    'InitialLearnRate', 0.0001, ...
    'MaxEpochs', 150, ...
    'MiniBatchSize', 16, ...
    'Shuffle', 'every-epoch', ...
    'ValidationData', imdsTest, ...
    'ValidationFrequency', 5, ...
    'Plots', 'training-progress');

net = trainNetwork(imdsTrain, lgraph, options);

% 图像重建
img_low = imread('data/test/1.png');
img_high = predict(net, double(img_low));

% 输出重建后的高分辨率图像
imshow(uint8(img_high*255));

其中代码2老是显示BatchNormalization = true;这个属性不存在,求指教

  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-05-17 14:20
    关注

    参考GPT和自己的思路:针对第一个问题,可以尝试排查代码运行异常的原因,比如是否缺少某些函数、路径是否正确等。同时,可以参考官方文档和一些开源项目的实现方式,来调整自己的代码。关于添加GUI按钮,需要根据实际情况来决定是否需要添加,具体实现方式可以参考MATLAB GUI编程的相关文档。

    针对第二个问题,出现BatchNormalization属性不存在的情况可能是因为使用的MATLAB版本较低,不支持这个属性。可以考虑升级MATLAB版本或者修改代码,将BatchNormalization去掉,然后重新运行程序。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月16日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?