@nms09
,
的代码
v1 = 0 (200、200);
缺点= abs (rand () * 10);
为u = 1: 200
为v = 1:200
v1 (u, v) =缺点;
结束
结束
相当于
v1 = 1 (200200) * 10 * rand ();
因为兰德总是U(0, 1),所以abs (rand())是不必要的,因为每个元素的嵌套循环分配相同的值。
图像v1将白色的方形90%的时间。其他10%的情况下,这将是一个广场,是一个统一的灰色阴影。这是因为当Matlab呈现一个浮点数组作为一个图像,它假定是灰度值的值在0和1之间。值< = 0的情节一样黑。值> = 1块白色。价值10 * rand()将转换为白色,90%的时间。
图像v2-v5由1和1之间的数字各不相同。所有负面价值的像素将呈现为黑色,如上所述。PCA经营的正面和负面的价值观,但所有负值是黑色的图片。因此有一种强烈的非线性数字数组和之间的关系呈现的形象。这减少了PCA在复制图像的有效性。由于这些原因,我建议生成图像与基础值在0和1之间变化。例如,cos (x)替换为(1 + cos (x) / 2;sin (x)替换为(1 + sin (x)) / 2。
像素值矢量和vec2变化从-0.5 + 0.5。这是故意的吗?我会选择变异从0到1,显示完整的动态范围从黑到纯白。这也有好处,vec的范围和vec2将匹配的范围基础图像,v1-v5,改变从黑到纯白。
最好把图片处理。所以我添加了代码来显示一些图片。图片由原来的代码如下所示。这些图像的外观是影响显示的大小。波纹模式的出现和消失的一个调整图像大小。
(下图)在这里图片修改生成的代码。这些图像是不同于以前的,因为(1)每次运行的随机数是不同的,和(2)v1,原全白在90%的情况下,现在是一个中间的灰色,和(3)我已经取代了sin (x)与(1 + sin (x)) / 2,等等,v2-v5,(4)我已经取代了(0.5 * sin (x)) (0.5 + 0.5 * sin (x))矢量和vec2。变化(3)和(4)导致更少的黑色像素,并消除广泛的全黑的地区。
脚本的末尾,您计算sum1,这应该是一个重建矢量,利用主成分。下图显示矢量和sum1由最初发布代码生成的。
下面的图显示了矢量和sum1修改生成的代码。vec不同于运行运行,由于使用的随机数来生成它。
一种比较vec的相似性和sum1每个图像转换为一个列向量,然后计算皮尔逊相关的列向量。
> > disp (corr(重塑(sum1[1] 40000年),重塑(矢量,[1]40000年)))
0.9959
这里是五分的相关性的原始代码。
0.6986 0.7188 0.7145 0.7014 0.8616
这里有相关性的五分修改代码。
0.9941 0.7252 0.9533 0.5947 0.9959
这是一个小样本的大小。似乎修改后的代码产生相关性较高的旧高和旧低。