Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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/4/matlab/15.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/8/lua/3.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
Image copyobj复制整个图像,而不是仅复制轴_Image_Matlab_Image Processing_Plot - Fatal编程技术网

Image copyobj复制整个图像,而不是仅复制轴

Image copyobj复制整个图像,而不是仅复制轴,image,matlab,image-processing,plot,Image,Matlab,Image Processing,Plot,我得到的是一个显示连接组件面积的图。我想做的是进一步处理绘图图形,例如清理一点或imcompleteit等,然后能够将原始绘图中的轴应用于此图像,并能够提取ylabel 让我用我的代码和一些例子来解释上述问题 这是我的图,y轴代表对象区域。这是我想转移到新图像的重要轴 因为我只对轴感兴趣,所以我使用 h = findobj(gcf,'type','axes'); 因此,我可以在没有轴和边界干扰的情况下处理图形,我保存图形时不使用这些属性 set(gca, 'visible', 'off');

我得到的是一个显示连接组件面积的图。我想做的是进一步处理绘图图形,例如清理一点或
imcomplete
it等,然后能够将原始绘图中的轴应用于此图像,并能够提取
ylabel

让我用我的代码和一些例子来解释上述问题

这是我的图,y轴代表对象区域。这是我想转移到新图像的重要轴

因为我只对轴感兴趣,所以我使用

h = findobj(gcf,'type','axes');
因此,我可以在没有轴和边界干扰的情况下处理图形,我保存图形时不使用这些属性

set(gca, 'visible', 'off'); % Hide the axis and borders
hgexport(gcf, 'plot1.jpg', hgexport('factorystyle'), 'Format', 'jpeg');
这就是我得到的:

到目前为止还不错

现在开始处理,或者换言之,根据我的需要改变情节

plot_img = rgb2gray(imread('plot1.jpg'));
img_bw_plot = im2bw(plot_img, graythresh(plot_img));

[rows cols] = size(plot_img);

new = zeros(size(plot_img));

for i = 1: rows
    for j = 1: cols
        if (img_bw_plot(i,j) == 0)
            new(i, 1:10) = 255;
        end
    end
end

f = figure;

imshow(new);
copyobj(h,f)
这将生成一个奇怪的重叠图像,其中,整个图像不是仅复制轴,而是复制在
新建的
上。
datacursormode
也无法在重叠图像之外工作


首先,我有点困惑,如果你首先得到了这个数字,为什么不使用以下方法从中提取数据:

lines=findobj(gca,'type','line');
y=zeros(1,length(lines));
for i=1:length(lines)
  y(i)=get(lines(i),'ydata');
end
在那里你会得到所有的数据

但是,假设原始图形与可以访问Axis对象的子对象的图形不同(尽管所有子对象都被复制在一起表明情况并非如此)。您需要了解的是,MATLAB中的“轴”对象不仅仅是图形的轴,而是整个图形。例如,当您有5个子图时,每个较小的图都是一个轴对象,图形本身是其子对象之一,即“线”对象(请参阅上面的示例)

因此,在这堂课之后:),一个解决方案是,您可以围绕新绘制的图像手动创建这些轴,而不是复制轴对象:

set(gca,'visible','on');
s=size(new); 
set(gca,'ytick',linspace(1,s(1),7),'yticklabel',linspace(6000,0,7));
这应该可以按照与原始图形相同的方式在y轴上放置7个记号。同样的方法也适用于手动创建x轴的标签

(我试着把结果图像放在这里,但我没有足够的声誉这么做。这是在stackoverflow兄弟身上!)


不过,请注意,这会在图形上创建标签,使您产生相同轴的错觉,而点的实际坐标实际上由您保存的图像的大小决定。因此,如果要确保图像大小相同,则需要调整原始图形的大小,使其最终达到相同的大小,如果给定0-6000,这将是一个非常大的图像。

轴不在彼此上方的原因是,在代码中无法保证它们的大小相同或位置相同。拿一个手柄来控制你身体上的所有轴,检查它们的位置,你会发现它们是不同的。另外,您是否可以澄清,您了解通过复制轴,可以获得所有轴特性,而不仅仅是轴中绘制的数据。(至少对我来说,不清楚你是否能从你的措辞中理解这一点。)我试图在我的代码中使用相同的大小,
new=zero(size(plot_img))
这是否可以确保新图像的大小与我最近保存为
plot1.jpg
的绘图的大小相同。另外,你说通过复制轴,我得到了所有的属性,而不仅仅是绘制的数据。我不需要打印的数据,我只需要
Ylabel
。我是不是搞错了?是图形窗口上的位置不同,而不是数据集的大小。是的,如果你只需要一个YLabel,那就从你原来的轴上取下它,放到你的新轴上。是的,这就是我的目标,但我得到的只是上面所示的图像的副本。你能告诉我怎样才能把ylabel复制到我的新轴上吗?我在上面的代码中尝试过,但显然失败了。你仍然需要更清楚地知道你想要什么。您想要ylabel吗?它是一个描述性文本字符串,在原始图像中似乎没有?或者您想要YTickMarks和YTickLabels,它们是轴左侧的数字?