找到有值/ 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
答案 0 :(得分:1)
[x, y] = find(bw2 == 1)
x
和y
是数组,除非只有一个像素为白色。
但是,if i==x
和if j==y
正在将单个数字与数组进行比较。这是错误的。
答案 1 :(得分:1)
正如Anthony指出的那样,x和y是数组,因此i==x
和j==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);
如果您想修复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