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 14ginput(N)的输入参数
是从当前显示的图像中获取的点数。你想要任意点击点的RGB值(如我的回答中所示)还是矩形区域?@chappjc是的。点击点好的点,加上一点。但一旦你习惯了我回答中的各种技巧,它们就会带来最小的痛苦。相反,这三个字母让我的手指疼痛:f
-o
-r
:)@chappjc-每件事都有时间和地点。我实际上只是运行了一个基准测试,比较了这两个代码。与用户输入数据所花费的时间相比,它们中的任何一个都是惊人的快,当我总计超过10000次运行时,我的代码形式比点击10次的速度快3倍——在点击100次左右实现盈亏平衡。点击500点后,代码速度将提高3.5倍。这表明,消除for
循环并不总是值得的……我完全同意。我只是在开玩笑,对自己毫无根据地厌恶循环有点自嘲。自嘲没什么错。这比等待别人去做要好得多。