解释一下代码function[array64]=getfeature(input) % if (input=file) % title('go on'); % else % title('stop'); [row,col]=size(input);%输入一个矩阵,row值:矩阵的行数,col:矩阵的列数 basement1=0; basement2=0; leaveone=mod(row,8);%row():row函数求指定单元格的行号;计算row/8的余数,附给leaveone leavetwo=mod(col,8);%col():col函数求指定单元格的列号;计算col/8的余数,附给leavetwo for i=1:8 rowspace=floor(row/8);%floor向负方向取最近的整数 if(leavetwo>0) rowspace=rowspace+1; leaveone=leaveone-1; end basement1=basement1+rowspace; basement2=0; for j=1:8 colspace=floor(col/8);%floor向负方向取最近的整数 if(leavetwo>0) colspace=colspace+1; leavetwo=leavetwo-1; end basement2=basement2+colspace; count=0; sum=0; for k=basement1-rowspace+1 :basement1 for l=basement2-colspace+1:basement2 count=count+input(k,l); sum=sum+1; end end array(i,j)=count/sum; end end index=1; for(i=1:8) for(j=1:8) array64(index,1)=array(i,j); index=index+1; end end
时间: 2024-04-28 22:23:03 浏览: 16
这段代码实现了将一个输入矩阵转换为长度为64的特征向量的过程。具体来说,它将输入矩阵分割成8x8的小块,每个小块中的所有元素的平均值就是该小块的特征值,将这些特征值按顺序组成一个长度为64的向量。代码中的变量input表示输入矩阵,而变量array表示每个小块的特征值,变量array64表示最终的特征向量。代码中的循环实现了对每个小块的特征值的计算,其中变量basement1和basement2表示当前小块的左上角在原始矩阵中的位置,而变量rowspace和colspace表示当前小块在行和列方向上需要占用的长度。
相关问题
function[array64]=getfeature(input) % if (input=file) % title('go on'); % else % title('stop'); [row,col]=size(input);%输入一个矩阵,row值:矩阵的行数,col:矩阵的列数 basement1=0; basement2=0; leaveone=mod(row,8);%row():row函数求指定单元格的行号;计算row/8的余数,附给leaveone leavetwo=mod(col,8);%col():col函数求指定单元格的列号;计算col/8的余数,附给leavetwo for i=1:8 rowspace=floor(row/8);%floor向负方向取最近的整数 if(leavetwo>0) rowspace=rowspace+1; leaveone=leaveone-1; end basement1=basement1+rowspace; basement2=0; for j=1:8 colspace=floor(col/8);%floor向负方向取最近的整数 if(leavetwo>0) colspace=colspace+1; leavetwo=leavetwo-1; end basement2=basement2+colspace; count=0; sum=0; for k=basement1-rowspace+1 :basement1 for l=basement2-colspace+1:basement2 count=count+input(k,l); sum=sum+1; end end array(i,j)=count/sum; end end index=1; for(i=1:8) for(j=1:8) array64(index,1)=array(i,j); index=index+1; end end
这段代码是用来获取一个输入矩阵的特征向量的,具体实现方式是将这个矩阵分割成多个小块,然后对每个小块求出其中所有元素的平均值,最后将这些平均值按照顺序组成一个长度为64的向量。其中,代码中的变量basement1和basement2表示当前小块的左上角在原始矩阵中的位置,而变量rowspace和colspace表示当前小块在行和列方向上需要占用的长度。
解释代码clear clc str1=input('please enter the testing number: '); %str1='0'; str1=int2str(str1); %整数转换为字符串 %ceshituname=imread('0-9.bmp'); str2=input('please enter the testing picture: '); %ceshituname=imread('0-9.bmp'); str2=int2str(str2); %整数转换为字符串 ceshituname=imread(strcat(str1,'-',str2,'.bmp'));%从图形文件读取图像 ceshitu2bw=im2bw(ceshituname);%基于阈值的图像转换为二值化图像 ceshituvector=getfeature(ceshitu2bw); wkj=load('wkj2(2).dat');%输入层到隐层的权重矩阵 wji=load('wji2(2).dat');%隐层到输出层的权重矩阵 netj=wji*ceshituvector; %netj is 14*1 隐含层输入 yj=f(netj); %yj is 14*1 隐含层输出 netk=wkj*yj; %netk is 10*1 输出层输入 z=f(netk) %z is 1*10 输出层输出 ceshituvector ceshitu=find(z==max(z));%查找最大元素 ceshitu=int2str(ceshitu); if ceshitu=='10' ceshitu='0'; end if ceshitu==str1 %如果识别正确 显示原始图片和识别结果 figure(1); imshow(ceshituname); ceshitunamestr=strcat(ceshitu,'.jpg'); figure(2); imshow(ceshitunamestr); end
这段代码实现了一个基于神经网络的数字识别程序,具体流程如下:
1. 用户输入测试数字和对应的图片编号。
2. 根据用户输入的数字和图片编号,读取对应的图片。
3. 将图片转换为二值图像。
4. 提取该图像的特征向量。
5. 加载预先训练好的神经网络模型中的权重矩阵。
6. 将特征向量输入神经网络中进行分类,输出最有可能的数字。
7. 判断识别结果是否正确,如果正确则显示原始图片和识别结果。
代码中的具体实现细节如下:
- 第1行:清空命令窗口和工作区变量。
- 第2行:提示用户输入测试数字,用变量str1保存用户输入的数字,并将其转换为字符串。
- 第4-5行:提示用户输入测试图片编号,用变量str2保存用户输入的编号,并将其转换为字符串。
- 第7行:根据用户输入的数字和图片编号,使用字符串拼接函数strcat()生成对应的图片文件名,并使用imread()函数读取该图片。
- 第9行:使用im2bw()函数将读入的图片转换为二值图像。
- 第11行:使用getfeature()函数提取该图像的特征向量,该函数的实现细节不在此代码中体现。
- 第13行:使用load()函数加载预先训练好的神经网络模型中的权重矩阵wkj。
- 第14行:使用load()函数加载预先训练好的神经网络模型中的权重矩阵wji。
- 第16行:使用输入层到隐层的权重矩阵wji和特征向量进行矩阵乘法运算,得到隐层的输入netj。
- 第18行:使用激活函数f()对隐层的输入进行激活,得到隐层的输出yj。
- 第20行:使用隐层到输出层的权重矩阵wkj和隐层的输出进行矩阵乘法运算,得到输出层的输入netk。
- 第22行:使用激活函数f()对输出层的输入进行激活,得到输出层的输出z。
- 第23行:输出特征向量。
- 第25行:使用find()函数查找z中最大值所在的位置,并将其保存到变量ceshitu中。
- 第26行:将ceshitu转换为字符串类型。
- 第28-30行:如果ceshitu等于10,则将其改为0。
- 第32-38行:如果ceshitu等于用户输入的数字str1,则显示原始图片和识别结果。
代码实现了一个简单的数字识别程序,但是其中的一些细节,例如加载权重矩阵、激活函数的具体实现等并没有在代码中展示。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)