6

画像にマウスカーソルの座標を表示することができないようで、同時に ginput を使用してポイントを保存することもできません。

現在、次のことを試しています。

MriHotrod = imread('Image.bmp');
Fig = figure('Name','BobDole'),...
    imshow(Image, 'InitialMagnification', 250)

axis on
impixelinfo

Image_1 = ginput(4)

close BobDole

ginput は引き続き機能しますが、impixelinfo は一定のままです

Pixel Info = (X, Y) Pixel Value

これを回避するいくつかの方法を知っていますが、それらには関数が含まれています。これは、関数の使用を避けることができるかなり単純な問題のようです。

4

1 に答える 1

6

入力edit ginputして 238 行目までスクロールすると、次のように表示されます。

% Adding this to enable automatic updating of currentpoint on the figure 
set(fig,'WindowButtonMotionFcn',@(o,e) dummy());

つまり、図ginputの a を設定しWindowButtonMotionFcnます。私の推測では、この関数も使用しているため、呼び出されるとimpixelinfoすぐに無効になります。ginput

実際、impixelinfoval( で使用される関数impixelinfo) では、83 行目あたりで次のことがわかります。

callbackID = iptaddcallback(hFig,'WindowButtonMotionFcn', @displayPixelInfo);

奇妙なことに、4 ポイントをクリックした後、どのようにリセットされるのでしょうか?

この魔法は、次の 222 行目で実現されますginput

initialState.uisuspendState = uisuspend(fig);

どうやら、後でリセットするために、uisuspend既存の機能を一時停止するために使用される、文書化されていない少し機能です。WindowButton*したがって、この行をコメントアウトすると

%initialState.uisuspendState = uisuspend(fig);

保存ginputして、すべてをやり直すと、必要な動作が表示されます。

そもそもなぜこれらの機能が一時停止するのかがわかります。理由はよくわかりませんが、そのような機能が 2 つ有効になっていると、すべてが動作しなくなるほど遅くなります。

于 2012-07-12T18:55:48.500 に答える