在MATLAB imagesc函数中显示网格线

时间:2015-05-21 06:34:25

标签: image matlab matlab-figure

我一直在尝试使用imagesc函数显示纯黑色网格线,这样每个像素周围都有一个黑色边框。我尝试了一些方法,但似乎无论如何,线条总是通过像素。举个例子,对于imagesc(randn(21,21)),我试图得到一个图,其中每个正方形(即像素)都有一个黑色边框。

我在这里找到了一个解决方案:In matlab, how to draw a grid over an image,但我不确定如何使用imagesc,而不是a.jpg图像。

我也尝试使用hold on功能手动放置线条。但是每个解决方案,似乎网格线都穿过像素的中间。任何帮助,将不胜感激。谢谢。

4 个答案:

答案 0 :(得分:5)

尝试以下方法:

imagesc(randn(21,21))
hold on;
for i = 1:22
   plot([.5,21.5],[i-.5,i-.5],'k-');
   plot([i-.5,i-.5],[.5,21.5],'k-');
end

编辑:事物是像素的中心位于整数格点处,因此要勾勒出需要使用以.5结尾的坐标的像素。

答案 1 :(得分:5)

pcolor正是如此:

pcolor(randn(15,21))
axis image %// equal scale on both axes
axis ij %// use if you want the origin at the top, like with imagesc

enter image description here

答案 2 :(得分:0)

如果您想突出显示对角线,请执行以下操作:

    mat=rand(10);
    figure, imagesc(mat)
    colormap gray

    hold on;
    n=size(mat,1);
    for i = 1:n
       plot([.5,n+.5],[i-.5,i-.5],'k-');
       plot([i-.5,i-.5],[.5,n+.5],'k-');
    end

    % Highlight diagonal values
    k=0.5;
    for i=1:numel(diag(mat))
    line([k, i+.5], [i+.5, i+.5], 'Color', 'r', 'LineWidth', 2);
    k=k+1;
    end

    k=0.5;
    for i=1:numel(diag(mat))
    line([k, i+.5], [k, k], 'Color', 'r', 'LineWidth', 2);
    k=k+1;
    end

    k=0.5;
    for i=1:numel(diag(mat))
    line([i+.5, i+.5], [k, i+.5], 'Color', 'r', 'LineWidth', 2);
    k=k+1;
    end

    k=0.5;
    for i=1:numel(diag(mat))
    line([k, k], [k, i+.5], 'Color', 'r', 'LineWidth', 2);
    k=k+1;
    end

答案 3 :(得分:0)

扩展@ luis-mendo的答案

如@Girardi所述,pcolor替换矩阵内容。例如:

i = eye(5);
pcolor(i);
axis image %// equal scale on both axes
axis ij %// use if you want the origin at the top, like with imagesc

给予Note: Shows 4x4 instead of 5x5

请注意,它给出的是4x4而不是5x5解决方案:用零填充矩阵


i = eye(5);
pcolor([i, zeros(size(i,1), 1); zeros(1, size(i,2)+1)])
axis image %// equal scale on both axes
axis ij %// use if you want the origin at the top, like with imagesc
axis off

给予

Correct