在Octave中显示图像的像素值?

时间:2014-05-17 02:11:30

标签: image plot octave pixels

如果我加载并显示图像,例如

c = imread('cameraman.tif');
imshow(c)

然后在绘图窗口中,在图像本身下,有两个数字表示当前光标位置,格式为

[39.25, 120.6]

我有两个问题:

  1. 可以调整显示以使位置为整数吗?那么每个屏幕像素一个像素?
  2. 此信息是否包含像素的灰度/ rgb值,例如

    [23, 46] = 127

    [23, 46] = (46,128,210)

  3. 我试图摆弄"轴"命令,但我找不到任何有用的东西。

    我想我想要的就像Matlab" Pixel Information Tool" impixelinfohttp://www.mathworks.com.au/help/images/ref/impixelinfo.html虽然我从http://wiki.octave.org/Image_package的八度图像维基知道impixelinfo当前未在Octave中实现。但也许有另一种方法可以达到同样的效果吗?

    我在linux(Ubuntu 12.04)下使用Octave-3.8.0,图像包2.2.0。

1 个答案:

答案 0 :(得分:5)

GNU Octave 3.8使用FLTK作为标准的graphics_toolkit。不幸的是,只有在鼠标移动(拖动)时使用此工具包按下按钮才触发WindowButtonMotionFcn(今天我将此视为一个错误)。但是你可以使用WindowButtonDownFcn。

如果单击图像,此示例将使用该位置的位置和图像值更新标题:

img = imread ("cameraman.png");
imshow (img)

function btn_down (obj, evt)
  cp = get (gca, 'CurrentPoint');
  x = round (cp(1, 1));
  y = round (cp(1, 2));
  img = get (findobj (gca, "type", "image"), "cdata");
  img_v = NA;
  if (x > 0 && y > 0 && x <= columns (img) && y <= rows (img))
    img_v = squeeze (img(y, x, :));
  endif

  if (numel (img_v) == 3) # rgb image
    title(gca, sprintf ("(%i, %i) = %i, %i, %i", x, y, img_v(1), img_v(2), img_v(3)));
  elseif (numel (img_v) == 1) # gray image
    title(gca, sprintf ("(%i, %i) = %i", x, y, img_v));
  endif
endfunction

set (gcf, 'WindowButtonDownFcn', @btn_down);

如果需要,您也可以在光标旁边放置一个文本。