Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 调查结果及;保存图像中某些选定像素的RGB值_Matlab_Image Processing_Rgb_Pixel - Fatal编程技术网

Matlab 调查结果及;保存图像中某些选定像素的RGB值

Matlab 调查结果及;保存图像中某些选定像素的RGB值,matlab,image-processing,rgb,pixel,Matlab,Image Processing,Rgb,Pixel,我使用ginput从RGB图像中选择了一些像素。现在我需要一个代码来同时提取所有选定像素的RGB值,并将它们保存在像素的坐标矩阵中。有什么建议吗 A=imread('AMAR.jpg'); imshow(A) samp1= ginput(A) samp1 一些结果是: 9592 95 81 99 66 97 66 100 58 105 51 108 42 116 33假设您单击RGB图像中的N点: N=4; imagesc(img) [x,y]=ginput(N); x,y值可用于查找

我使用
ginput
从RGB图像中选择了一些像素。现在我需要一个代码来同时提取所有选定像素的RGB值,并将它们保存在像素的坐标矩阵中。有什么建议吗

A=imread('AMAR.jpg');
imshow(A)
samp1= ginput(A)
samp1

一些结果是:

9592 95 81 99 66 97 66 100 58 105 51 108 42
116 33

假设您单击RGB图像中的
N
点:

N=4;
imagesc(img)
[x,y]=ginput(N);
x
y
值可用于查找每个位置的RGB向量:

x = round(x(:)); y = round(y(:));
locs = sub2ind(size(img),repmat(y,3,1),repmat(x,3,1),kron(1:3,ones(1,N)).'); %'
RGBvals = reshape(img(locs),N,3)
这将为每个点提供一个RGB值的
N
-by-3数组。使用交互式工具
impixelregion
目视验证颜色值


注:请参阅《克朗》一文,希望能揭开克朗在这里使用的神秘面纱。

@chappjc的答案会有用;我想提供一个更具“可读性”的小改动:

第一个-不带任何参数调用
ginput
。它将不断累积点击的点数,直到你点击“回车”。用户友好一点

第二,矢量化有时间和地点。当您只有几个点(即每次单击一点)时,矢量化代码的加速不太可能值得付出
sub2ind、repmat、kron…
的痛苦。这就给我们留下了以下问题:

imshow(A);
disp( 'Click points in the image; press return when finished' );
[xf, yf] = ginput;

xi = round(xf);
yi = round(yf);

N = numel(xi);
rgbValues = zeros(N, 3);

for ii = 1:numel(xi)
  rgbValues(ii,:) = reshape(A(yi(ii), xi(ii), :), 1, 3);
end
这将把您想要的值放入
rgbvalue


检查
xi
yi
的值是否按所示顺序返回;我认为这是对的,但如果我错了,你在阅读图像时必须使用顺序
A(xi(ii),yi(ii),:)

你能给出一些代码来说明如何提取单个值吗?通常,如果您有
rgbMatrix(N,N,3)
可以提取一个区域
region=rgbMatrix(5:10,6:12,:)以获取矩形区域。适应你的需要……`A=imread('AMAR.jpg');imshow(A)samp1=ginput(A)`这些是一些像素的坐标:samp1=95 92 95 81 99 66 66 100 58 105 51 108 42 116 33 124 25 133 18 141 14 151 10 164 9 173 9 186 10 200 14
ginput(N)的输入参数
是从当前显示的图像中获取的点数。你想要任意点击点的RGB值(如我的回答中所示)还是矩形区域?@chappjc是的。点击点好的点,加上一点。但一旦你习惯了我回答中的各种技巧,它们就会带来最小的痛苦。相反,这三个字母让我的手指疼痛:
f
-
o
-
r
:)@chappjc-每件事都有时间和地点。我实际上只是运行了一个基准测试,比较了这两个代码。与用户输入数据所花费的时间相比,它们中的任何一个都是惊人的快,当我总计超过10000次运行时,我的代码形式比点击10次的速度快3倍——在点击100次左右实现盈亏平衡。点击500点后,代码速度将提高3.5倍。这表明,消除
for
循环并不总是值得的……我完全同意。我只是在开玩笑,对自己毫无根据地厌恶循环有点自嘲。自嘲没什么错。这比等待别人去做要好得多。