就像普通的索引图像一样,在图的色彩映射中。不同之处在于矩阵值是线性的

时间:2017-04-15 13:45:54

标签: image matlab find rgb pixel

找到有值/ color = white的像素位置

for i=1:row
    for j=1:colo
      if i==x    if the row of rgb image is the same of pixel location row


      end
    end
end
end
what's Wrong

3 个答案:

答案 0 :(得分:1)

[x, y] = find(bw2 == 1) xy是数组,除非只有一个像素为白色。

但是,if i==xif j==y正在将单个数字与数组进行比较。这是错误的。

答案 1 :(得分:1)

正如Anthony指出的那样,x和y是数组,因此i==xj==y将无法正常工作。此外,RGB(i,j)仅使用前两个维度,但RGB图像具有三个维度。最后,从优化的角度来看,for循环是不必要的。

%% Create some mock data. 
% Generate a black/white  image. 
bw2 = rand(10);
% Introduce some 1's in the BW image
bw2(1:5,1:5)=1; 
% Generate a RGB image. 
RGB = rand(10,10,3)*255; 

%% Do the math. 
% Build a mask from the bw2 image
bw_mask = bw2 == 1;
% Set RGB at bw_mask pixels to white. 
RGB2 = bsxfun(@plus, bw_mask*255, bsxfun(@times, RGB, ~bw_mask)); % MATLAB 2016a and earlier
RGB2 = bw_mask*255 + RGB .* ~bw_mask; % MATLAB 2016b and later. 

答案 2 :(得分:1)

您可以使用逻辑索引。

要使逻辑索引工作,您需要将掩码(bw2)与RGB相同。
由于RGB是3D矩阵,因此需要复制bw2三次。

示例:

%Read sample image.
RGB = imread('autumn.tif');

%Build mask. 
bw2 = zeros(size(RGB, 1), size(RGB, 2));
bw2(1+(end-30)/2:(end+30)/2, 1+(end-30)/2:(end+30)/2) = 1;

%Convert bw2 mask to same dimensions as RGB
BW = logical(cat(3, bw2, bw2, bw2));

RGB(BW) = 255;

figure;imshow(RGB);

结果(只是装饰):
enter image description here

如果您想修复for循环实现,可以按如下方式执行:

[x, y] = find(bw2 == 1);
[row, colo, z]=size(RGB); %size of rgb image
for i=1:row
    for j=1:colo
        if any(i==x)    %if the row of rgb image is the same of pixel location row
            if any(j==y(i==x)) %if the colos of rgb image is the same of pixel loca colo
                RGB(i,j,1)=255; %set Red color channel to 255
                RGB(i,j,2)=255; %set Green color channel to 255
                RGB(i,j,3)=255; %set Blue color channel to 255
            end
        end
    end
end