【问题标题】:Displaying gridlines in MATLAB imagesc function在 MATLAB imagesc 函数中显示网格线
【发布时间】:2015-08-02 16:14:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: image matlab matlab-figure


    【解决方案1】:

    尝试以下方法:

    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 结尾的坐标。

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

      • 一个根本的区别是pcolor 为顶点着色而不是单元格,而imagesc 为单元格着色...应该注意从imagescpcolor,因为内容将被取代;检查它:figure;pcolor(hadamard(20));title('pcolor');set(gca,'YDir','Reverse');figure;imagesc(hadamard(20))
      【解决方案3】:

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

          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
      

      【讨论】:

        【解决方案4】:

        @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
        

        请注意,它给出的是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
        

        给了

        【讨论】:

          猜你喜欢
          • 2013-12-27
          • 1970-01-01
          • 2020-06-05
          • 1970-01-01
          • 1970-01-01
          • 2014-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多