如何在 Matlab 极轴上链接数据图像?

Posted

技术标签:

【中文标题】如何在 Matlab 极轴上链接数据图像?【英文标题】:How to linkdata images on Matlab polaraxes? 【发布时间】:2016-10-17 23:04:30 【问题描述】:

我正在尝试在极轴上使用linkdata 图像,这在plot/area/... 中很好地描述为linkdata 文档here 中的笛卡尔。 第一段根据 alpha 值制作两个带有剪切的图像的代码。 第二段循环并在极轴上绘制这些图像。 第一次迭代后,linkdata on 激活,但我收到通知,它不提供 Fix it 选项,如图 1 所示。 我认为错误在于我无法将linkdata 的数据源明确定义为图像,请参阅尝试1。 代码

close all; clear all; clc;
af = figure('Name', 'Do Not Touch');
%% Data generation
f = figure;
hax = axes(f);
rgb = 'peppers.png';
% http://blogs.mathworks.com/steve/2009/02/18/image-overlay-using-transparency/
rgb = imread('peppers.png');
I = rgb2gray(rgb);
h = imagesc(I, 'Parent', hax);
[M,N] = size(I);
block_size = 50;
P = ceil(M / block_size);
Q = ceil(N / block_size);
alpha_data = checkerboard(block_size, P, Q) > 0;
alpha_data = alpha_data(1:M, 1:N);
set(h, 'AlphaData', alpha_data.^2);
zeroFigureDecorations(hax); 
images1 = getframe(hax);

[M,N] = size(I);
block_size = 50*2;
P = ceil(M / block_size);
Q = ceil(N / block_size);
alpha_data = checkerboard(block_size, P, Q) > 0;
alpha_data = alpha_data(1:M, 1:N);
set(h, 'AlphaData', alpha_data.^2);
images2 = getframe(hax);

close all;
clearvars -except images;     

%% Polar
% http://***.com/a/40063951/54964
fp=figure('Name', 'Test', ...
    'Position',[200 200 851 404],'Resize','off'); % only half circle on polaraxes although warp can do eclipses
ThetaTicks = 0*pi:pi/10:1*pi;
pax = polaraxes( 'ThetaAxisUnits', 'radians', ...
    'ThetaLim',[min(ThetaTicks) max(ThetaTicks)],...
    'Color','none',...
    'GridAlpha',1,...
    'GridColor',[1 1 1],...
    'ThetaTick', ThetaTicks, ...
    'ThetaDir', 'counterclockwise', ...
    'Parent', fp);
imax = axes('Parent', fp, 'Visible', 'off');
zeroFigureDecorations(imax); 

for image=images
    h = imagesc(image1.cdata, 'Parent', imax); 

    zeroFigureDecorations(imax); 

    linkdata on; 

    angleRadians=-pi;
    I = getframe(pax);
    I = I.cdata;
    [x, y, z]=makePolar(I, angleRadians);
    imax.Children = warp(x, y, z, I);
    set(imax,'view',[-180 -90],'Visible','off');
    axis(imax,'tight')
    pause(0.5);
end

function zeroFigureDecorations(ax)
axis(ax, 'tight');
set(ax, 'yTickLabel', []);
set(ax, 'xTickLabel', []);
set(ax, 'Ticklength', [0 0]); % http://***.com/a/15529630/54964
colormap(ax, gray(1024));
box(ax, 'off');
axis(ax, 'off');
end

图。 1 单幅图像在极轴上是正确的,这里是在第二次迭代之后;顶部栏显示失败的linkdata 尝试,并且不像通常那样提供Fix it 选项

尝试 1

要显式设置guihandlesdatasources 但没有效果可能是因为没有在图像上显式应用linkdata 作为数据源

...
myhandles = guihandles(fp); 
for image=images
    h = imagesc(image1.cdata, 'Parent', imax); 
    myhandles.output = h; 
    myhandles.yData = []; 
    myhandles.xData = []; 
    set(get(myhandles.xData, 'Children'), 'XDataSource', myhandles.xData);  
    set(get(myhandles.yData, 'Children'), 'YDataSource', myhandles.yData);  
    ...
end

MathWorks 的联系人

MATLAB 反馈论坛解答

简短的回答是 Polaraxes 确实支持数据链接,但是 看起来您正在使用经纱,它正在创建一种表面 不支持数据链接的对象。有解决方法 例如,您可以修改要使用的 warp.m 文件 冲浪而不是表面。

我正在处理有关该主题的服务请求。

MATLAB:2016b 操作系统:Debian 8.5 MathWorks 服务请求:#02229120

【问题讨论】:

@AnderBiguri 请参阅链接数据的文档。极坐标表示应该与笛卡尔表示类似。 如果您还发布了以前版本的 MATLAB 的替代代码,我可以提供帮助,但由于版本问题,我无法运行该代码。 @AnderBiguri 您的 MATLAB 版本是多少? 2014b。基本上 2016b 之前的任何东西都不接受您处理轴并将它们传递给函数的方式(例如,Parent, hax 不是说你应该改,只是如果你改了我也许能帮上忙,没有压力! 【参考方案1】:

MATLAB 支持答案是当前的,因为没有关于修复的开发计划

简短的回答是 Polaraxes 确实支持数据链接,但是看起来您正在使用 warp,它正在创建一种不支持数据链接的表面对象。对此有一些解决方法,例如,您可以修改 warp.m 文件以使用 surf 而不是表面。

【讨论】:

以上是关于如何在 Matlab 极轴上链接数据图像?的主要内容,如果未能解决你的问题,请参考以下文章

在 pyqtgraph 中的多个图上链接自动缩放

libpng 未在 Mac OSX 10.9.2 上链接

matlab 如何将彩图转成灰度图

在idea上链接hive 并将mysql上的数据抽取到hive表中

matlab 如何将彩图转成灰度图

如何在 macOS 上链接 libc++?