我是matlab和编程的新手。我有一个大小为[640 780]的RGB图像。现在假设我只需要那些红色值大于100且剩余的像素我转换为255的像素。现在我想知道如何将所需的像素存储在不同的矩阵中,以便我可以直接使用这些值在原始RGB图片中导航以绘制ROI ???
a = 1; b = 1;
maybe_red = RGB;
for i = 1:sizeim(1)
for j = 1:sizeim(2)
if RGB(i,j,1) > 100
red_trace_x(a) = i;
red_trace_y(b) = j;
b = b+1;
else
maybe_red(i,j,:) = 1;
end
end
a = a+1;
end
目前,我将x
和y
存储在单独的数组中。但我想知道如何将x,y
值存储在单个矩阵中。
谢谢。!
答案 0 :(得分:2)
以下内容生成一个掩码(与原始图像大小相同的逻辑数组),其中红色通道值大于100的像素存储为1,其他像素存储为0:
img= imread('peppers.jpg');
mask=img(:,:,1)>100;
您可以使用蒙版索引到原始图像并使用find
对其进行更改,以确定与值为1的蒙版像素对应的线性索引:
indlin=find(mask);
img2 = img;
您可以直接使用线性索引,例如使红色通道饱和:
img2(indlin) = 255;
或绿色频道:
n = numel(img)/3;
img2(indlin+n) = 255;
从左到右,原始图像,面具,坐着红色,坐着绿色:
修改的
您可以使用
从线性索引中检索数组下标ix
和iy
[ix iy]=ind2sub(size(mask),indlin);
答案 1 :(得分:1)
如果你只存储元素的索引怎么样?
%% Load a sample image
RGB = imread('football.jpg');
b = 1;
maybe_red = RGB;
red = RGB(:,:,1); % Get the red component
% i will represent the index of the matrix
for i = 1:length(red(:)) % length(red(:)) = rows*cols
if red(i) > 100
red_trace(b) = i;
b = b+1;
else
[r,c] = ind2sub(size(red),i); % Convert the index to rows and cols
maybe_red(r,c,:) = 1;
end
end
imshow(maybe_red);
但可能更容易做到
red = RGB(:,:,1); % Get the red component of the image
[r,c] = find(red>100);
coord = [r c];