维数组不一致问题
68(30天)
显示旧的评论
ALEKSANDROS
2023年5月16日在43分
大家好。这是我的问题:我收到一个数据集的图像签名(特别是雪松数据集)和我的帮助下一个函数过程。我真的做了什么函数提取特征(11)特性。Ι想创建4补丁为每个图像更好地训练机器学习模型来区分假签名和真正的一个。当我运行代码得到这个错误:“要连接的数组的维度不一致”。下面,我将向您展示的主要代码伪造签名(我对原始签名相同的代码)和一段代码的功能:
主要代码:
clc;
清晰;
关闭所有;
格式紧凑的;
myFolder =”。/ full_forg ';
如果~ isdir (myFolder)
errorMessage = sprintf (错误:以下文件夹不存在:\ n % s的,myFolder);
uiwait (warndlg (errorMessage));
返回;
结束
filePattern = fullfile (myFolder,‘* . png”);
jpegFiles = dir (filePattern);
varray = [];
%为每一个虚假的形象
为k = 1:长度(jpegFiles)
k
baseFileName = jpegFiles (k) . name;
fullFileName = fullfile (myFolder baseFileName);
流(1,“现在阅读% s \ n”,fullFileName);
%读取图像
im1 = imread (fullFileName);
% im1 = imresize (im1 (650 650));
im1 = imresize (im1 (1024 1024));
%创建补丁
patchit (im1 (512 512));
%阅读补丁
负载patches.mat;
%得到补丁的数量
(~,~,~,pn) =(补丁)大小;
v = [];
active_pixesls = [];
%为每一个补丁
为我= 1:pn
im_patch =补丁(::,:,我);
[F, croped_image] = featureExtraction (im_patch);
v = [v F];
active_pixesls = [active_pixesls总和(croped_image (:)));
结束
响应= 0;%,因为它是一个虚假的形象
v = [v] active_pixesls反应;
varray = [varray;v];
结束
功能:
函数[Feat_Val, im_processed] = featureExtraction(我)
S = 512;
I2 = imresize(我,[S]);
dbstop如果错误;
dbstop如果警告;
% I3 = rgb2gray (I2);
I3 = im2gray (I2);
I3 = im2double (I3);
I3 = im2bw (I3);%将图像转换成黑白
% I3 = bwmorph (~ I3,“薄”,正)%细化图像
I3 = bwmorph (~ I3,“关闭”、正);
I3 = ~ I3;
谁能告诉我如何处理这个错误吗?
非常感谢! !
2的评论
接受的答案
骑自行车的人
2023年5月16日12:56
编辑:骑自行车的人
2023年5月16日在十四19
17日评论
ALEKSANDROS
2023年5月16日13:08
其实我想把整个显示错误信息截图,但玩具MATLAB答案不允许上传照片。在输入方面,我接受所有的雪松图像数据集,如下:
如果有任何需要请让我知道更多的信息。
骑自行车的人
2023年5月16日开始
一个可以上传图片,所以我不知道你的问题是什么。
你不应该期望每个人都在这里下载整个数据集来帮助你调试一个简单的MATLAB错误。相反,你可以上传一个或两个的图像,并使一小部分人可以运行的代码复制你的错误。让它
容易
的人来帮助你。
骑自行车的人
2023年5月17日15:44
我仍然不能运行您的代码。
但featureExtraction函数
函数[Feat_Val, im_processed] = featureExtraction(我)
你在这里上传不赋值
Feat_Val
或
im_processed
,所以代码错误。
你花任何时间使用我的建议尝试调试器来解决你自己的问题?
ALEKSANDROS
2023年5月17日16:03
是的,我使用补丁。其实为什么不赋值函数Feat_val还是im_processed ?我不理解这一点。
是的,我花了时间,但我没有找到一个解决方案。我仍然搜索dubugger的帮助。
骑自行车的人
2023年5月17日16:17
这是
featureExtraction
功能你上传:
函数[Feat_Val, im_processed] = featureExtraction(我)
S = 512;
I2 = imresize(我,[S]);
dbstop如果错误;
dbstop如果警告;
% I3 = rgb2gray (I2);
I3 = im2gray (I2);
I3 = im2double (I3);
I3 = im2bw (I3);%将图像转换成黑白
% I3 = bwmorph (~ I3,“薄”,正)%细化图像
I3 = bwmorph (~ I3,“关闭”、正);
I3 = ~ I3;
它从来没有计算
Feat_Val
或
im_processed
。
ALEKSANDROS
2023年5月17日16时55分
好的我将发送函数的代码,没有照片,因为我需要上传很多照片和我将再次超过限制。
函数
[Feat_Val, im_processed] = featureExtraction(我)
S = 512;
I2 = imresize(我,[S]);
dbstop
如果错误
;
dbstop
如果警告
;
% I3 = rgb2gray (I2);
I3 = im2gray (I2);
% I3 = medfilt2 (I3));
I3 = im2double (I3);
I3 = im2bw (I3);
%将图像转换成黑白
% I3or = I3;
% I3 = bwmorph (~ I3,“薄”,正);%细化图像%细化图像
I3 = bwmorph (~ I3,
“关闭”
、正);
I3 = ~ I3;
im1 = I3;
k = 1;
为
i = 1: S
为
j = 1: S
如果
(I3 (i, j) = = 0)
u (k) =我;
v (k) = j;
k = k + 1;
I3 (i, j) = 1;
结束
结束
结束
如果
k = = 1
Feat_Val = 0 (1、33);
im_processed = true(大小(im1 [1, 2]));
其他的
C = (u, v);
N = k - 1;
%的像素数量签名
:oub =总和(C (1)) / N;
%的原始x协调质心图像
ovb =总和(C (2:)) / N;
%原图像的质心y坐标值
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % * * * * * * * * * * * * * *旋转% % % % % % % % % % % % % % % % % % % % % % % %
%将签名移动到原点
为
i = 1: N
你(我)=你(我)-oub + 1;
v (i) =(我)-ovb + 1;
结束
%的新曲线的签名
C = (u, v);
:乌兰巴托=总和(C (1)) / N;
vb =总和(C (2:)) / N;
ubSq =总和((C(1:)乌兰巴托)。^ 2)/ N;
vbSq =总和((C (2:) vb)。^ 2) / N;
为
i = 1: N
紫外线(i) = u(我)*(我);
结束
uvb =(紫外线)/ N;
M = [ubSq uvb; uvb vbSq];
%计算矩阵的最小igen值
minIgen = min (abs (eig (M)));
%的特征向量
MI = [ubSq-minIgen uvb, uvb vbSq-minIgen];
θ=(每股((MI (1)) / MI(2)) * 180) /π;
thetaRad =(θ*π)/ 180;
rotMat = [cos (thetaRad) sin (thetaRad);罪(thetaRad)因为(thetaRad)];
% %旋转签名,并把新坐标
为
i = 1: N
v (i) = (C (2, 1) * cos (thetaRad))——(C(我)* sin (thetaRad));
你(我)= (C(我)* sin (thetaRad)) + (C(我)* cos (thetaRad));
结束
C = (u, v);
%的签名搬到原来的位置
为
i = 1: N
你(我)=圆(u (i) + oub-1);
v (i) =圆(v(我)+ ovb-1);
结束
%旋转后的图像签名可能出去境界(128 x128)
%我们必须签名曲线移动
mx = 0;
%协调移动x
我= 0;
%移动y协调
如果
(min (u) < = 0)
mx = min (u);
为
i = 1: N
你(我)=你(我)+ mx + 1;
结束
结束
如果
(min (v) < = 0)
我= min (v);
为
i = 1: N
v (i) =(1) +我+ 1;
结束
结束
C = (u, v);
为
i = 1: N
I3 ((u (i)), (v (i))) = 0;
% I3 ((u (i)) (v (i))) = 1;
结束
%去除额外的空白
xstart = S;
xend = 1;
ystart = S;
yend = 1;
为
r = 1: S
为
c = 1: S
如果
((I3 (r、c) = = 0))
如果
(r < ystart)
ystart = r;
结束
如果
((r > yend))
yend = r;
结束
如果
(c < xstart)
xstart = c;
结束
如果
(c > xend)
xend = c;
结束
结束
结束
结束
%将图像复制到另一个矩阵
为
我= ystart: yend
为
j = xstart: xend
im ((i-ystart + 1) (j-xstart + 1) = I3 (i, j);
结束
结束
%裁剪图像
im_processed =我;
%特征提取,国安局- - - - - - - - - - - - - - - - - - - - - - - - - - -
PixelB = 0;
PixelA = 0;
为
我= ystart: yend
为
j = xstart: xend
如果
(im (i-ystart + 1, j-xstart + 1) = = 0)
PixelB = PixelB + 1;
结束
PixelA = PixelA + 1;
结束
结束
% disp ([PixelB PixelA]);
国家安全局= PixelB / PixelA;
NSA2 = 1-NSA;
PixelB = 0;
PixelA = 0;
为
我= ystart: yend
为
j = xstart: xend
如果
(im (i-ystart + 1, j-xstart + 1) = = 1)
PixelB = PixelB + 1;
结束
PixelA = PixelA + 1;
结束
结束
% NSA2 = PixelB / PixelA;
% disp (NSA);
%功能Extration -比例- - - - - - - - - - - - - - - - - -
height_sign = yend-ystart;
length_sign = xend-xstart;
aspect_ratio = length_sign / height_sign;
%特征提取:最大的水平和垂直投影
max7 = 0;
为
我= ystart: yend
夏= 0;
为
j = xstart: xend
如果
(im ((i-ystart + 1) (j-xstart + 1) = = 0)
夏=夏+ 1;
结束
结束
如果
(夏> max7)
max7 =夏;
结束
结束
max7;
max1 = 0;
为
我= xstart: xend
夏= 0;
为
j = ystart: yend
如果
(im ((j-ystart + 1) (i-xstart + 1) = = 0)
夏=夏+ 1;
结束
结束
如果
(夏> max1)
max1 =夏;
结束
结束
max1;
xdiff = xend-xstart;
ydiff = yend-ystart;
Hor_Proj = max7 / xdiff;
Ver_Proj = max1 / ydiff;
max2 = 0;
为
我= ystart: yend
夏= 0;
为
j = xstart: xend
如果
(im ((i-ystart + 1) (j-xstart + 1) = = 1)
夏=夏+ 1;
结束
结束
如果
(夏> max2)
max2 =夏;
结束
结束
max2;
max3 = 0;
为
我= xstart: xend
夏= 0;
为
j = ystart: yend
如果
(im ((j-ystart + 1) (i-xstart + 1) = = 1)
夏=夏+ 1;
结束
结束
如果
(夏> max3)
max3 =夏;
结束
结束
max3;
xdiff1 = xend-xstart;
ydiff1 = yend-ystart;
Hor_Proj1 = max2 / xdiff1;
Ver_Proj1 = max3 / ydiff1;
%特征提取,具有水平和垂直投影
min1 = 0;
为
我= ystart: yend
summ1 = 0;
为
j = xstart: xend
如果
(im ((i-ystart + 1) (j-xstart + 1) = = 0)
summ1 = summ1 + 1;
结束
结束
如果
(summ1 < min1)
min1 = summ1;
结束
结束
min1;
min2 = 0;
为
我= xstart: xend
summ1 = 0;
为
j = ystart: yend
如果
(im ((j-ystart + 1) (i-xstart + 1) = = 0)
summ1 = summ1 + 1;
结束
结束
如果
(summ1 < min2)
min2 = summ1;
结束
结束
min2;
xdiff2 = xend-xstart;
ydiff2 = yend-ystart;
Hor_Proj2 = min1 / xdiff2;
Ver_Proj2 = min2 / ydiff2;
min3 = 0;
为
我= ystart: yend
summ1 = 0;
为
j = xstart: xend
如果
(im ((i-ystart + 1) (j-xstart + 1) = = 1)
summ1 = summ1 + 1;
结束
结束
如果
(summ1 < min3)
min3 = summ1;
结束
结束
min3;
min4 = 0;
为
我= xstart: xend
summ1 = 0;
为
j = ystart: yend
如果
(im ((j-ystart + 1) (i-xstart + 1) = = 1)
summ1 = summ1 + 1;
结束
结束
如果
(summ1 < min4)
min4 = summ1;
结束
结束
min4;
xdiff3 = xend-xstart;
ydiff3 = yend-ystart;
Hor_Proj3 = min3 / xdiff3;
Ver_Proj3 = min4 / ydiff3;
%特征提取终点- - - - - - - - - - - - - - - - - - - - - - - - - - - -
i1 = im1;
(行,坳、深度)= (i1)大小;
% %添加行
addrow = 1 (col);
i1 = [addrow;addrow;i1;addrow];
(行,坳、深度)= (i1)大小;
% %添加列
addcol = 1(第1行);
i1 = horzcat (addcol i1, addcol addcol);
(行,坳、深度)= (i1)大小;
i1 = ~ i1;
相交点= 0;
为
r = 3:第一行
为
c = 2:第二列
如果
(i1 (r、c) = = 1)
如果
颈- 1 (i1 (r1) + i1 (r 1 c) + i1 (r 1 c + 1) + i1(颈- 1 r) + i1 (r, c + 1) + i1 (r + 1,颈- 1)+ i1 (r + 1, c) + i1 (r + 1, c + 1) = = 1)
相交点=相交点+ 1;
结束
结束
结束
结束
如果
国防部(xdiff 2) = = 1
xdiff = xdiff-1;
结束
如果
国防部(ydiff 2) = = 1
ydiff = ydiff-1;
结束
%特征提取的重力中心,垂直分割图像
n1 = im (:, 1: xdiff / 2);
%分割图像
n2 = im (:, xdiff / 2 + 1: xdiff);
sum1 = 0;
pix_total = 0;
%上半年
为
我= 1:ydiff
pix_sum = 0;
为
j = 1: xdiff / 2
如果
(n1 (i, j) = = 0)
pix_sum = pix_sum + 1;
pix_total = pix_total + 1;
结束
结束
sum1 = sum1 + (pix_sum *我);
结束
日元= sum1 / pix_total;
RY1 = y₁/ ydiff;
sum1 = 0;
为
i = 1: xdiff / 2
pix_sum = 0;
为
j = 1: ydiff
如果
(n1 (j, i) = = 0)
pix_sum = pix_sum + 1;
结束
结束
sum1 = sum1 + (pix_sum *我);
结束
X1 = sum1 / pix_total;
RX1 = 2 * X1 / xdiff;
第二个一半的%
sum1 = 0;
pix_total = 0;
为
我= 1:ydiff
pix_sum = 0;
为
j = 1: xdiff / 2
如果
(n2 (i, j) = = 0)
pix_sum = pix_sum + 1;
pix_total = pix_total + 1;
结束
结束
sum1 = sum1 + (pix_sum *我);
结束
Y2 = sum1 / pix_total;
RY2 Y2 = / ydiff;
sum1 = 0;
为
i = 1: xdiff / 2
pix_sum = 0;
为
j = 1: ydiff
如果
(n2 (j, i) = = 0)
pix_sum = pix_sum + 1;
结束
结束
sum1 = sum1 + (pix_sum *我);
结束
X2 = sum1 / pix_total;
RX2 X2 = 2 * / xdiff;
重心= [[RX1 RY1] [RX2 RY2]];
%特征提取:斜坡- - - - - - - - - - - - - - - - - -
m = xdiff;
m = m / 2;
k = m + X2;
斜率= (Y2-Y1) / (k-X1);
%特征提取:regionprops - - - - - - - - - - - - - - - - - -
应用灰度共生矩阵建立%特征提取:properties-entropy - - - - - - - - - - - - - - - - - -
BW =熵(im);
glcm = graycomatrix (im);
应用灰度共生矩阵建立统计= graycoprops (,
对比相关能同质性的
);
对比= stats.Contrast;
相关= stats.Correlation;
能量= stats.Energy;
同质性= stats.Homogeneity;
%特征提取:regionprops - - - - - - - - - - - - - - - - - -
统计= regionprops (
“表”
、即时通讯、
“重心”
,
“区域”
,
的边界框(“大小)
,
“ConvexArea”
,
“偏心”
,
“EquivDiameter”
,
“EulerNumber”
,
“程度”
,
“FilledArea”
,
“定位”
,
“周长”
,
“稳健”
,
…
“MajorAxisLength”
,
“MinorAxisLength”
);
中心= stats.Centroid;
=(中心)/ 100;
ax =值(1);
直径=意味着([统计数据。MajorAxisLength stats.MinorAxisLength), 2);
b =(直径)/ 100;
bx =值(b, 1);
半径=直径/ 2;
cc =(半径)/ 100;
ccx =值(cc);
d = stats.Area;
dx =值(d);
xmin = 0.9;
xmax = 1;
n = 1;
x = xmin +兰德(1,n) * (xmax-xmin);
e = stats.BoundingBox;
前女友=值(e, 1);
f = stats.ConvexArea;
fx =值(f);
g = stats.Eccentricity;
gx =值(g);
h = stats.EquivDiameter;
hx = (h)中位数;
2 = stats.EulerNumber;
iix = (ii)中位数;
j = stats.Extent;
jx =值(j);
kk = stats.FilledArea;
kkx =值(k);
l = stats.Orientation;
lx =值(l);
毫米= stats.Perimeter;
mmx =值(mm);
n = stats.Solidity;
nx =值(n);
% Feat_Val =[国家安全局Hor_Proj Ver_Proj Hor_Proj2 Ver_Proj2交叉点质心BW对比相关能均匀ax bx ccx dx前任fx gx hx iix jx kkx lx mmx nx);
Feat_Val =[国家安全局aspect_ratio Hor_Proj交叉点质心斜率);
如果
长度(Feat_Val) ~ = 33
1 = = 1;
结束
结束
结束
骑自行车的人
2023年5月17日18:02
我没能再现你的错误。
这就是我试着:
- 复制你的“主要代码”从最初的问题
- 复制你的略高于featureExtraction函数
- 5份签名的图像你上传,并把它们放在full_forg目录
代码跑去完成,没有错误。
ALEKSANDROS
在10。54分2023年5月19日
你好了。所以我也固定,但我有一个问题。我给你发送两张图片让我填的一个代码,一个错误:
我使用功能重塑的原因是我想让“v”向量与“varray”向量相等的尺寸。
骑自行车的人
2023年5月19日12点
第一,而不是粘贴屏幕截图,最好是剪切和粘贴代码本身,作为一个m文件或上传代码。如果你做一个截图,我们需要输入代码如果我们想试一试。
其次,我现在重复自己,你应该分享一个完整的例子,我可以粘贴到MATLAB复制你的错误。例如,在这里,我不知道输入错误引起的,我不知道v的大小,等等。我必须赚很多的猜测。再一次,让它尽可能简单的人来帮助你。
在这种特殊情况下,这是我的猜测:
如果v小于137个元素,看看发生了什么:
%定义一个向量,太短了
v =兰德(1125);
%使用您的代码
v =重塑(v (1:137), [137])
指数超过数组元素的数量。指标不得超过125人。
原因是代码试图访问不存在的元素。(在我的示例中,元素126:137不存在)。
我不知道如果在您的应用程序是有道理的,但如果向量太短,也许你可以添加南或零值,使其长度为137。
更多的答案(0)
一个错误发生
无法完成的行动,因为页面所做的更改。重新加载页面更新状态。
你也可以从下面的列表中选择一个网站
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。