解决imshow显示图像为纯白或者纯黑或者为杂点(noise)(上篇)

最近在刷题和写论文,没怎么更新博客,在毕业之前争取发表2篇论文写2个专利,也算是不虚度硕士生涯了(自我安慰)。

进入正题:

问题背景:

由于待投论文需要可视化网络的权值图来看看网络学习到了什么,然后我自己写了一个 small program. 由于项目的需要,我把权值图保存成了matrix,然后用matlab进行显示,然后出了这个问题。

 

1)有问题的方法如下:

这个是读文件的code,很easy,然而就是这个地方出了问题......

function G = readpng(filename)
G = imread(filename);
G = im2double(G).*255;
G = reshape(G,92*112,[]);
end

这个是用于读取权值画图的code:

for i = 1: network.layer_2.neuron_number %Y区域一共400个神经元
    a = network.layer_2.neuron(i).bottom_up_weight; 
    b = reshape(a',network.width,network.height); 
    max_temp = max(a);
    min_temp = min(a); 
    b = (b-min_temp)./(max_temp-min_temp);
    b = b';
    row = floor((i-1)/number_total)+1;  %i = 1时,第一行,floor是地板除
    col = i- (row-1)*number_total;  %i = 1 时,第一张图放在第一行第一列
    start_col = (row-1)*network.width+1;
    end_col = row*network.width;   % 第一幅图布局为1到64列,64是图像的width
    start_row = ((col-1)*network.height+1);
    end_row = (col*network.height); %1到88行是图像的height
    stem_xy(start_row:end_row,start_col:end_col)...
        = b;
end
imshow(stem_xy);
figure

 然后我可视化权重后显示如下:

 

看到这种显示,很容易想到是不是读进来的数据排列方式不对?然后开始尝试,结果我就改了如下处:

2)正确的方法如下:

function G = readpng(filename)
G = imread(filename);
G = G’  % 就改了这一行
G = im2double(G).*255;
G = reshape(G,92*112,[]);
end

然后就显示正确了,正确结果如下。然后就想了下为什么,现总结如下:解决imshow显示图像为纯白或者纯黑或者为杂点(noise)(上篇)_第1张图片

 下篇做分析和总结

你可能感兴趣的:(MachineLearning,imshow,显示图像为纯白,显示图像为纯黑,显示图像为杂点)