1

現在、MATLABで衛星画像に注釈を追加する作業を行っています。各テキストフィールドの下の色はかなり異なる可能性があるため、テキストの下の背景色を使用して、見やすく、読みやすくしたいと思います。

ただし、これを行うと、多くの地形が不明瞭になります。各テキストボックスの背景色を半透明にしようと思ったのですが、解決策を考え出すのに行き詰まりました。

何か案は?'facealpha'をたぶん0.5に設定できるUI要素を期待していました。また、回転をサポートするテキストも必要です(以下の例を参照してください)。

以下は、いくつかのサンプルコードと結果の画像です。衛星データを含むワークスペースは、次のリンクにもあります。 ワークスペースの例

figure(1);clf
imagesc(xx,yy,Map);

hold on
plot(xInspection,yInspection,'g.-')

% # Two ways of making a rotated text annotation. 
% # Cant make background semi-transparent
testAnno= annotation('textarrow',[0.5 0.5],[0.5 0.5], ...
                'string','textarrow annotation', ...
                'HeadStyle','none','LineStyle', 'none',...
                'TextRotation',asin(directionVec(1))*180/pi,...
                'TextBackgroundColor',[0.7 0.7 0.7]);

testText = text(mean(xInspection),mean(yInspection),'text annotation', ...
        'rotation',asin(directionVec(1))*180/pi, ...
        'HorizontalAlignment','right', ...
        'color',[0 0 0], ...
        'backgroundcolor',[0.7 0.7 0.7], ...
        'fontsize',8);

ここに画像の説明を入力してください

4

2 に答える 2

4

プロパティを持っているHgObjectsのようには見えないか、返されませんannotation(それらは存在する可能性がありますが、さまざまなハックを使用して、または試しても、それらを見つけることができませんでした)。textBackgroundAlphagetundoc

自分で背景を描くことで、何かがうまくいくようになりました。概念の簡単な証明は次のとおりです。

f = figure;
tObj = text(.5, .5, 'text object', 'FontSize', 20);
set(gca,'XLimMode', 'manual', 'YLimMode', 'manual'); % prevent the axes from resizing automatically
p = get(tObj, 'Extent'); %Get the outer position of the text

% now create a  patch around the text object
pObj = patch([p(1) p(1) p(1)+p(3) p(1)+p(3)], [p(2) p(2)+p(4) p(2)+p(4) p(2)], 'r');
uistack(tObj, 'top'); % put the text object on top of the patch object

set(pObj , 'FaceAlpha', .2); % set the alpha of the patch face to .2

%Rotate the objects
set(tObj, 'Rotation', 20);
rotate(pObj, [0 0 1], 20);
于 2012-11-05T14:29:52.913 に答える
2

これを行う唯一の方法は、注釈に色を設定せずpatch、各注釈の背景にを配置することです。だからこのようなもの:

% Use completely transparent annotations
hA = annotation('textarrow', ..., 'TextBackgroundColor', 'none')

% Place a transparent patch exactly in the background of your annotation
hP = patch(X, Y, 'white', 'EdgeColor', 'none', 'FaceColor', 'white', ...
    'alpha', 0.3)

% Ensure that your annotation is on top
uistack(hA, 'top')

しかしもちろん、大きな問題はパッチ(XY)の正しい座標を決定することです。座標に回転行列を掛けるだけで簡単に回転できます。ただし、パッチの長さと高さ、およびその中央の位置を見つけるのはそれほど簡単ではありません。Matlabセントラルでこれに役立つ関数を見つけることができるかもしれません...

于 2012-11-05T14:29:38.887 に答える