在Matlab中仅为图像的一部分着色

时间:2016-10-15 08:11:35

标签: image matlab image-processing colors

我试图在Matlab中仅为图像的一部分着色。例如,我加载一个RGB图像,然后我用Otsu的方法(graythresh)获得一个掩码。我希望在应用1 im2bw作为阈值后,仅将颜色保留在值为graythresh的像素中。例如:

image = imread('peppers.png');
thr = graythresh(image);
bw = im2bw(image, thr);

使用此代码,我获得以下二进制图像:

Binary image

我的目标是将颜色保持在白色像素中。

谢谢!

2 个答案:

答案 0 :(得分:1)

我还有另外一个关于如何替换我们不关心的像素的建议。这通过为bw图像中存在黑色像素的每个切片创建线性索引来工作。与find的结果相加是因为bwimage的一个“切片”的大小,这就是我们获取其他2个切片的索引的方式。

启动MATLAB 2016b:

image(find(~bw)+[0 numel(bw)*[1 2]]) = NaN;

旧版本:

image(bsxfun(@plus,find(~bw),[0 numel(bw)*[1 2]])) = NaN;

然后imshow(image)给出:

enter image description here

请注意NaN转换为integer classes0

在澄清其他像素应保持灰色版本后,请参阅以下代码:

% Load image:
img = imread('peppers.png');
% Create a grayscale version:
grayimg = rgb2gray(img);
% Segment image:
if ~verLessThan('matlab','9.0') && exist('imbinarize.m','file') == 2
  % R2016a onward:
  bw = imbinarize(grayimg);
  % Alternatively, work on just one of the color channels, e.g. red:
  % bw = imbinarize(img(:,:,1));
else
  % Before R2016a:
  thr = graythresh(grayimg);
  bw = im2bw(grayimg, thr);
end
output_img = repmat(grayimg,[1 1 3]);
colorpix = bsxfun(@plus,find(bw),[0 numel(bw)*[1 2]]);
output_img(colorpix) = img(colorpix);
figure; imshow(output_img);

仅使用红色通道进行二值化时的结果:

Gray + color

答案 1 :(得分:0)

你的问题错过"并用黑色"替换其余部分。这有两种方式:

紧凑型解决方案:使用bsxfun

     <script>
$( "#text" ).hover(
  function() {
    $( this ).append( $( "<span>Climate change: 'Monumental' deal to cut HFCs, fastest growing greenhouse gases</span>" ) );
  }, function() {
    $( this ).find( "span:last" ).remove();
  }
);
 </script>

虽然我很高兴看到前一个,但你也可以看看这个循序渐进的方法:

newImage = bsxfun(@times, Image, cast(bw, 'like', Image));

哪个可以为黑色区域提供不同的替代品:

enter image description here

更新

根据评论,% separate the RGB layers: R = image(:,:,1); G = image(:,:,2); B = image(:,:,3); % change the values to zero or your desired color wherever bw is false: R(~bw) = 0; G(~bw) = 0; B(~bw) = 0; % concatenate the results: newImage = cat(3, R, G, B); 的{​​{1}}区域应替换为相同输入的灰度图像。这是如何实现它的:

false

结果如下:

enter image description here