【问题标题】:My plotted lines aren't appearing on my output figures我的绘图线没有出现在我的输出数字上
【发布时间】:2015-03-04 19:23:26
【问题描述】:

所以我一次处理一堆图像,尝试将它们全部显示为图形,并在每个单独的图像上显示一系列绘制线作为该过程的结果。在一些帮助下,我修复了图形标题问题,但是绘制的线没有出现在我的最终数字上,下面是代码:

inputFolder = fullfile(pwd, 'BMPData');
filePattern = fullfile(inputFolder, '*.bmp');
%Get list of all Bmp Files in Folder
BmpFiles = dir(filePattern)

for i=1:length(BmpFiles)
    fname = BmpFiles(i).name;
    fullFileNameInput = fullfile(inputFolder,fname);
    A = imread(fullFileNameInput);

    %// Change
    AR=A(:,:,1);
    [rows, columns] = size(AR);
    y1 = 200;
    y2 = 315;
    row1 = AR(y1, :); % Extract this line of gray levels from the image.
    row2 = AR(y2, :);
    figure('name',fname),imshow(A), hold on; 
    plot([0, columns], [y1, y1], '.b'); 
    plot([0, columns], [y2, y2], '.m');
end

我这样做的原因是因为我想在所有图像上标记 2 行(200 和 315),然后对它们行中的所有像素进行一些统计分析,以便进一步处理技术。

【问题讨论】:

  • 好的,很好。一张图片就可以了。我们可以看到更多代码吗? fname 设置在哪里?
  • @rayryeng 我已经在我的函数中添加了声明,请参见上文,谢谢。
  • 嗯,您复制/粘贴了我的答案的一个版本,这并不意味着作为替代品。你一定会在倒数第二行遇到可怕的错误。 fh(i) = figure, imshow(A) 行看起来也像一个错误。我认为, 应该是;。您将这些语句放在同一行是否有原因?
  • 是的,我很抱歉今天只是想同时做 100 件事,最后一年的大学真的对我有影响!不过,我真的很感谢您的反馈,谢谢。

标签: matlab image-processing title matlab-figure figure


【解决方案1】:

你得到columns undefined 的原因是variable scope。当您在SegmentationNew 中定义columns 时,columns 仅在SegmentationNew 的生命周期内 可用并且仅在SegmentationNew 内可见。一旦 SegmentationNew 完成,column 就不再被定义。

我老实说 can't make heads or tails SegmentationNew 正在做什么,但从它的外观来看,你没有充分的理由打电话给它。你所需要的只是y1y2,它们被定义为常量。 columns你可以从图片的列中判断。我还将借用 Martin J.H. 的重复帖子。已链接以使图形窗口的命名更加优雅。

要添加到这篇文章,您的原始代码只是绘制点。如果您还想绘制线条,则需要在每次调用plot 时从绘图字符串中删除. 字符。具体来说,将.b.m分别更改为bm

因此,这样做:

for i=1:length(BmpFiles)
    fname = BmpFiles(i).name;
    fullFileNameInput = fullfile(inputFolder,fname);
    A = imread(fullFileNameInput);

    %// Change
    columns = size(A,2);
    y1 = 200;
    y2 = 315;

    figure('name',fname); %// Change
    imshow(A); hold on;
    plot([0, columns], [y1, y1], 'b'); hold on; %// Change
    plot([0, columns], [y2, y2], 'm');
end

【讨论】:

  • 图形标题现在很好,但是绘制的线没有出现在它们上面
  • 我不确定您要绘制的究竟是什么。这就是为什么我说我不明白SegmentationNew 是什么。顺便说一句,当 cmets 块中的代码超过几行时,它会变得非常难看。建议您将此编辑添加到您的帖子中。
  • 对不起,我是这个网站的新手,我已经对问题进行了编辑并试图更好地解释。
  • @SeánMcNeill - 你想绘制 line 还是只绘制点?最后的绘图语法 ('.b, '.m') 仅绘制单点。如果要画线,请删除每个 plot 调用的 ..... 所以只需 bm
猜你喜欢
  • 2023-03-21
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-03
  • 2021-06-06
  • 1970-01-01
相关资源
最近更新 更多