马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 峥途 于 2024-11-5 21:37 编辑
这次分享的是用MATLAB进行灰度图的打印(就是给了一个m个样本每个样本n个特征的X矩阵文件,打印出来原始的图像)。
我读取的图像数据库是7M的,无法上传,大家可以自己试试别的图像的矩阵特征文件
我学习的事GIthub上的一个大佬的,但是他这里有一点小小的错误,我捉摸了一下午才发现不是我没理解,是他写错了
代码如下:%% 灰度图显示练习2
%% 清除
clear;close all;clc;
%% 读取
load('ex3data1.mat');
randIndex = randperm(size(X,1));
seldata = X(randIndex(1:100),:);
%% 可视化
displayData(seldata);
displayData函数:
[/b]%% 函数部分
function [figurePane,display_array] = displayData(X,image_width)
%% 初始参数设置(图像大小,样本结构)
[m,n] = size(X);
if ~exist('image_width','var')||empty(image_width)
image_width = round(sqrt(n));
end
image_height = round(n/image_width);
%% 设置figurePane(灰度、大小)
colormap(gray);
figure_rows = floor(sqrt(m));
figure_cols = ceil(sqrt(m));
%% 初始化display_array
pad = 1;%图像之间的间隔
display_array = -ones(pad+(image_height+pad)*figure_rows, ...
pad+(image_width+pad)*figure_cols);% 将原始图形初始化为纯黑色
%% 将X的值赋给display_array
current_image = 1;
for row = 1:figure_rows
for col = 1:figure_cols
max_val = max(X(current_image,:));% 求得每行(每个变量)的最大值
% 赋值的同时,进行了归一化处理
display_array(pad+(image_height+pad)*(row-1)+(1:image_height), ...
pad+(image_width+pad)*(col-1)+(1:image_width))=...
reshape(X(current_image,:),image_height,image_width)/max_val;
current_image = current_image+1;
if current_image > m
break;
end
end
if current_image > m
break;
end
end
%% 绘制
figurePane = imagesc(display_array,[-1,1]);
title('Random handwritten digits');
axis image off;
% 关闭坐标轴
drawnow; % 直译:现在就画~
ps:这两天学习(复习)神经网络的one-VS-All算法,但是感觉初次接触这玩意,逻辑回归在这个之前学了一点,所以难度最大的、最难理解的函数部分,竟然是打印那个图片!(代码对我来说相当复杂, 捉摸了一下午算是整透了),学的时候总是觉着自己学的方法可能不好,就是扣得比较死,但是我现在不想改,想把这个吴恩达的东西都学完了,然后学完MATLAB去学对应的python代码,希望最终结果是好的!
|