从origo(0,0)到(1,0)的行产生间隙的代码,如果C
维度达到无穷大,则似乎达到零;但是,我无法用任何大小的C
来得到它,所以我认为工件可能是由Matlab图形内部特征或图像数据本身(AnderBiguri)引起的,因为img=imread('peppers.png')
似乎没有出现这种情况。 。
制作图像的代码,按export_fig
存储它并将其从笛卡尔映射到Polar,其中发生伪像
close all; clear all; clc;
%% Make image
f1=figure;
hax=axes(f1);
x = rand(1,6);
y = exp(rand(1,181));
C = rand(3613,3613);
imagesc(hax, x, y, C);
box(hax, 'off');
axis(hax, 'off');
set(hax, 'yTickLabel', []);
set(hax, 'xTickLabel', []); % for polar presentation
set(hax, 'Ticklength', [0 0]); % http://stackoverflow.com/a/15529630/54964
filename='/home/masi/Images/testi';
% by default, export_fig has cropping
[img, alpha] = export_fig(filename, '-png', '-native', '-q101', '-a1', '-m1', '-RGB', '-nofontswap', '-dpng', hax);
close all;
%% Read Image
img=imread('/home/masi/Images/testi.png');
% http://stackoverflow.com/a/7586650/54964
[h,w,~] = size(img);
s = min(h,w)/2; % have here .../1, some phenomenon occurs
[rho,theta] = meshgrid(linspace(0,s-1,s), linspace(0,2*pi,s));
[x,y] = pol2cart(theta, rho);
z = zeros(size(x));
subplot(121), imshow(img)
subplot(122), warp(x, y, z, img)
view(2), axis square tight off
图。 1 size(C)=[3613 3613]
时的输出,
图2 size(C)=[36130 36130]
Matlab:2016a
Export_fig:08/08/16版本
操作系统:Debian 8.5 64位
Linux内核:4.6的backports
硬件:华硕Zenbook UX303UA
答案 0 :(得分:5)
我快速看了一下,是的,发生了一些奇怪的事情。问题是你的图像周围有一个边框,在绘制image
时似乎没有边框,因为它与背景的颜色相同!
如果使用
创建图像C = rand(100,100);
然后在使用imagesc
而不是imshow
加载后绘制它,您可以看到:
这就是它被转化为极地情节中失踪的乐队。如果您只删除大小为1的图像周围的边框,则会得到完整的图。
我最好的猜测是在export_fig
内的任何地方,你的陈述% by default, export_fig has cropping
都是假的,或者裁剪有一些小错误,并从背景中获取1个像素。
答案 1 :(得分:0)
从原来的措辞来看,我理解你的问题是:
export_fig
导出图片。我对轴或边框不感兴趣,只对图像数据感兴趣,所以我通过了适当的选项来摆脱它们。如果实际这个问题,那么我建议您不要使用export_fig
,因为它不是为了保存图像数据而设计的保存数字。也就是说,它是具有大量自定义功能的print
函数的包装器,可以生成您将在出版物中使用的内容。它应用适当的边框,分辨率,保留轴,网格等等。在这种特殊情况下,您可以选择在输出图像的底部添加1像素厚度的白色边框。 (是的,这可能是也可能不是错误,值得向作者报告)。
因此,如果您实际要做的是保存图像数据(即原始像素rgb值),您应该使用imwrite
代替。完整示例,改编自您的代码:
close all; clear all; clc;
%% Make image
f1 = figure; hax = axes();
x = rand(1,6); y = exp(rand(1,181)); % image placement
C = rand(3613,3613); % image data
imagesc(x, y, C);
colormap parula(256); % The colormap in the example (default since 2014b)
box(hax, 'off'); axis(hax, 'off');
set(hax, 'yTickLabel', [], 'xTickLabel', [] , 'Ticklength', [0 0]);
filename='testi.png';
% convert grayscale image to rgb to preserve "colormap" in output file
Cind = gray2ind(C, 256); Crgb = ind2rgb(Cind, parula(256));
imwrite(Crgb, filename, 'png');
%% Read image
img=imread('testi.png');
[h,w,~] = size(img); s = min(h,w)/2;
[rho,theta] = meshgrid(linspace(0,s-1,s), linspace(0,2*pi,s));
[x,y] = pol2cart(theta, rho); z = zeros(size(x));
subplot(1, 2, 1); imagesc(img); axis image off;
subplot(1, 2, 2); warp(x, y, z, img); view(2); axis image off;
colormap parula(256);
导致:
这个问题措辞严厉。在对原始问题进行了许多不幸的激烈评论和编辑之后,在我看来,现在的实际问题似乎是:
export_fig
函数 专门 (由于我不想进入的原因)而我正在尝试使用它仅导出图像数据export_fig
中的错误,如果我向作者报告,有没有办法绕过它?在这种情况下答案是“是的,这完全是一个错误,你应该报告它。”
(此外,如果这真的是 您要问的问题的版本,请做出额外的努力,以便在将来更清楚地说明您的问题,明确说明您要解决的问题并采取措施,以避免浪费人们的时间来回答错误的事情,并进行激烈的讨论。)