ipix matlab,ipixswitch.m · zigzag2015/machinevision-toolbox-matlab - Gitee.com

%IPIXSWITCH Pixelwise image merge

%

% OUT = IPIXSWITCH(MASK, IM1, IM2) is an image where each pixel is

% selected from the corresponding pixel in IM1 or IM2 according to the

% corresponding pixel values in MASK. If the element of MASK is zero IM1 is

% selected, otherwise IM2 is selected.

%

% IM1 or IM2 can contain a color descriptor which is one of:

% - A scalar value corresponding to a greyscale

% - A 3-vector corresponding to a color value

% - A string containing the name of a color which is found using COLORNAME.

%

% IPIXSWITCH(MASK, IM1, IM2) as above but the result is displayed.

%

% Example::

% Read a uint8 image

% im = iread('lena.pgm');

% and set high valued pixels to red

% a = ipixswitch(im>120, im, uint8([255 0 0]));

% The result is a uint8 image since both arguments are uint8 images.

%

% a = ipixswitch(im>120, im, [1 0 0]);

% The result is a double precision image since the color specification

% is a double.

%

% a = ipixswitch(im>120, im, 'red');

% The result is a double precision image since the result of colorname

% is a double precision 3-vector.

%

% Notes::

% - IM1, IM2 and MASK must all have the same number of rows and columns.

% - If IM1 and IM2 are both greyscale then OUT is greyscale.

% - If either of IM1 and IM2 are color then OUT is color.

% - If either one image is double and one is integer then the integer

% image is first converted to a double image.

%

% See also COLORIZE, COLORNAME.

% Copyright (C) 1993-2011, by Peter I. Corke

%

% This file is part of The Machine Vision Toolbox for Matlab (MVTB).

%

% MVTB is free software: you can redistribute it and/or modify

% it under the terms of the GNU Lesser General Public License as published by

% the Free Software Foundation, either version 3 of the License, or

% (at your option) any later version.

%

% MVTB is distributed in the hope that it will be useful,

% but WITHOUT ANY WARRANTY; without even the implied warranty of

% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

% GNU Lesser General Public License for more details.

%

% You should have received a copy of the GNU Leser General Public License

% along with MVTB. If not, see .

function co = ipixswitch(mask, I1, I2)

if ischar(I1)

% image is a string color name

col = colorname(I1);

if isempty(col)

error('unknown color %s', col);

end

I1 = icolor(ones(size(mask)), col);

elseif isscalar(I1)

% image is a scalar, create a greyscale image same size as mask

I1 = ones(size(mask), class(I1))*I1;

elseif ndims(I1) == 2 && all(size(I1) == [1 3])

% image is 1x3, create a color image same size as mask

I1 = icolor(ones(size(mask), class(I1)), I1);

else

% actual image, check the dims

s = size(I1); s = s(1:2);

if ~all(s == size(mask))

error('input image sizes do not conform');

end

end

if ischar(I2)

% image is a string color name

col = colorname(I2);

if isempty(col)

error('unknown color %s', col);

end

I2 = icolor(ones(size(mask)), col);

elseif isscalar(I2)

% image is a scalar, create a greyscale image same size as mask

I2 = ones(size(mask), class(I2))*I2;

elseif ndims(I2) == 2 && all(size(I2) == [1 3])

% image is 1x3, create a color image same size as mask

I2 = icolor(ones(size(mask), class(I2)), I2);

else

% actual image, check the dims

s = size(I2); s = s(1:2);

if ~all(s == size(mask))

error('input image sizes do not conform');

end

end

if isfloat(I1) && isinteger(I2)

I2 = idouble(I2);

elseif isinteger(I1) && isfloat(I2)

I1 = idouble(I1);

end

nplanes = max(size(I1,3), size(I2,3));

if nplanes == 3

%mask = repmat(mask, [1 1 3]);

if size(I1,3) == 1

I1 = repmat(I1, [1 1 3]);

end

if size(I2,3) == 1

I2 = repmat(I2, [1 1 3]);

end

end

% in case one of the images contains NaNs we cant blend the images

% using arithmetic

% out = mask .* I1 + (1-mask) .* I2;

out = I2;

mask = logical(mask);

mask = repmat(mask, [1 1 nplanes]);

out(mask) = I1(mask);

if nargout > 0

co = out;

else

idisp(out);

shg

end

一键复制

编辑

Web IDE

原始数据

按行查看

历史

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值