Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中标记图像上的终止和分叉手指细节点_Matlab_Image Processing_Fingerprint - Fatal编程技术网

在MATLAB中标记图像上的终止和分叉手指细节点

在MATLAB中标记图像上的终止和分叉手指细节点,matlab,image-processing,fingerprint,Matlab,Image Processing,Fingerprint,我有一个关于指纹匹配的项目,我被困在标记图像上的终止点和分叉点。我已经存储了像素的坐标。我该怎么做呢?假设您的图像存储在一个名为im的灰度图像中,并且终止点和分叉点存储在2D矩阵中,其中第一列表示行,第二列表示每个点的列,您可以使用。sub2ind将二维坐标转换为线性索引,以便可以轻松地对图像中的设置像素或矩阵中的位置进行矢量化。同样地,通过将图像作为3D矩阵堆叠三次,将灰度图像变成RGB图像。如果您还记得,RGB颜色模型中的灰度图像具有相同的所有红色、绿色和蓝色通道。例如,灰色将是R,G,B=

我有一个关于指纹匹配的项目,我被困在标记图像上的终止点和分叉点。我已经存储了像素的坐标。我该怎么做呢?

假设您的图像存储在一个名为im的灰度图像中,并且终止点和分叉点存储在2D矩阵中,其中第一列表示行,第二列表示每个点的列,您可以使用。sub2ind将二维坐标转换为线性索引,以便可以轻松地对图像中的设置像素或矩阵中的位置进行矢量化。同样地,通过将图像作为3D矩阵堆叠三次,将灰度图像变成RGB图像。如果您还记得,RGB颜色模型中的灰度图像具有相同的所有红色、绿色和蓝色通道。例如,灰色将是R,G,B=128128

让我们把分叉点称为bifur,把终止点称为term,它们是我前面指定的2D矩阵格式。因此,请执行以下操作:

%// Get linear indices for bifurcation and termination points
ind_b = sub2ind(size(im), bifur(:,1), bifur(:,2));
ind_t = sub2ind(size(im), term(:,1), term(:,2));

%// Mark them on the image
red = im;
green = im;
blue = im;

red(ind_b) = 255;
green(ind_b) = 0;
blue(ind_b) = 0;

red(ind_t) = 0;
green(ind_t) = 255;    
blue(ind_t) = 0;

im_colour = cat(3, red, green, blue);
imshow(im_colour);
让我们慢慢地浏览这段代码。我首先计算出分叉点和终止点在图像中的线性指数。我接下来要做的是创建红色、绿色和蓝色通道,这些通道都是原始图像的副本。在此之后,我访问每个颜色通道,并用不同的颜色标记分叉点和终止点。对于分叉点,我把它们变成纯红色或R,G,B=255,0,0。对于终止点,我将它们设置为纯绿色或R,G,B=0255,0。一旦我设置了点的颜色,我就通过将通道堆叠在一起,特别是选择第三维度来创建彩色图像。最后我展示了这张图片

您可能还需要处理图像上标记的大小。如您所见,标记的像素只是单个像素本身,并且取决于图像的分辨率,您可能无法在图像中正确地看到它们。因此,我建议您在围绕原点的网格内标记像素。也许你可以在感兴趣的像素周围做一个5 x 5的网格。使用此选项,可以为每个点创建一个for循环,并标记围绕该点的5 x 5像素网格。我还将假设你的标记在图像中足够好,这样我们就不会冒险将网格画出边界。因此,代码将进行如下修改:

%// Get linear indices for bifurcation and termination points
ind_b = [];
for idx = 1 : size(bifur,1)
    [c,r] = meshgrid(bifur(idx,2)-2:bifur(idx,2)+2, bifur(idx,1)-2:bifur(idx,1)+2);
    c = c(:);
    r = r(:);
    ind_b = [ind_b; sub2ind(size(im), r, c);
end

ind_t = [];
for idx = 1 : size(term,1)
    [c,r] = meshgrid(term(idx,2)-2:term(idx,2)+2, term(idx,1)-2:term(idx,1)+2);
    c = c(:);
    r = r(:);
    ind_t = [ind_t; sub2ind(size(im), r, c);
end

%// Mark them on the image
red = im;
green = im;
blue = im;

red(ind_b) = 255;
green(ind_b) = 0;
blue(ind_b) = 0;

red(ind_t) = 0;
green(ind_t) = 255;    
blue(ind_t) = 0;

im_colour = cat(3, red, green, blue);
imshow(im_colour);
改变的是代码的开头。对于分岔点和终止点的每个点,我用来确定围绕每个相关像素的5 x 5点网格,然后为5 x 5网格内的每个点生成线性指数。然后我将其添加到两个的最后一个数组中,这样我们就可以执行上面看到的相同的标记逻辑

如果你想让颜色不是红色和绿色的话,你就必须对它们进行调整,但这应该是你首先要做的事情。如果您想要RGB模型中可能的颜色列表,一个很好的工具是找出您想要的颜色,并提供RGB值以复制该颜色


祝你好运

这对我来说有点不清楚。“终止点和分叉点”到底是什么意思?对于标记,你是指在指纹图像上绘制这些点吗?当你想将两幅图像与指纹匹配时,你主要提取脊线的分叉点和终止点,然后进行比较。我找到了这些点,但现在我必须标记它们。通过标记,我想在这些点坐标中输入不同颜色的符号。是否需要保存标记的图像?我找到了答案