用Matlab搞了个小工具,以后给你女朋友的证件照换底色再也不用发愁了

181 阅读4分钟

证件照换底色这件事在生活中并不是很频繁,然而,当你手上只有一种底色的照片,遇到找工作,填表或者在线上传某种要求必须为指定底色的证件照时,却又是比较重要的。

我想更重要的莫过于,有一天你的女朋友突然要你给她的照片换个底色

5

这对不用PS的男朋友们可能有点棘手,一些在线的小程序应用可能不免费,去某宝或者照相馆转换,需要小费而且还不能马上拿到手......

为了不影响家庭和谐,这事肯定得做啊。那有没有什么办法能一键换证件照底色呢?

突然,很快啊,啪一下就想起来了,我特么可以用Matlab啊!

下面有请Matlab登场,大家鼓掌👏欢迎,代码如下:

function B = adjust(A, color1, color2, sigma)
    color1 = reshape(color1, [1 1 3]);
    color2 = reshape(color2, [1 1 3]);
    color_diff = color2 - color1;
    A = im2double(A);
    t = exp(-0.5 * sum(bsxfun(@minus, A, color1) .^ 23) / (sigma ^ 2));
    B = A + bsxfun(@times, color_diff, repmat(t, [1 1 3]));
end

上面代码来源于知乎上的一个高赞回答(大家都用matlab做过哪些有趣的事儿? : www.zhihu.com/question/35…

原理特别简单,即越远离原始背景色的地方,希望保留原色,越靠近原始背景色的地方就转换成目标背景色;而距离通过高斯核函数度量,其中的权重由sigma控制。sigma越大,认为越靠近原始背景色,反之亦然。

应用上述方法转换后的证件照在边缘区域更平滑些,当然背景色要比设定的背景色偏暗些。比如,设定的背景色是纯红色,但转换后背景色是暗红色。

2_1_label2_label
修正前修正后

为了修正这一点,从证件照换底色本身原理出发,即证件照中的人像部分不作处理,而只对背景区域作着色,这是简单的图像分割问题,而且分割的目标只有前景(人像)和背景。

了解了这一点,我们可以对上述代码做一简单修改,直接在高斯核函数度量后进行二值化图像分割,最后只对背景作着色,修正后代码如下:

function B = adjustPicBgColor(A, color1, color2, sigma)
% Code come from:https://www.zhihu.com/question/35023022/answer/61357048Modified by Qingping Wangzi.
%
color1 = reshape(color1, [1 1 3]);
color2 = reshape(color2, [1 1 3]);
% color_diff = color2 - color1;
% A = im2double(A);
t = exp(-0.5 * sum(bsxfun(@minus, A, color1) .^ 23) / (sigma ^ 2));
% B = A + bsxfun(@times, color_diff, repmat(t, [1 1 3]));
t1 = imbinarize(t);
t2 = imfill(imcomplement(t1), 'holes');

[x, y] = find(t2 == 0);
for ii = 1 : numel(x)
    A(x(ii), y(ii), :) = color2;
end  % end if

B = A;

end  % end function

可以看到,修正后,人像和背景完全分离,相应地边缘部分更加清晰,与设定的背景色一致。

问题是解决了,家庭可以和睦了,但是每次选择原始照片背景色,目标背景色以及sigma参数的调节时很繁琐。或者会遇到照片分辨率低转换后有残留干扰的证件照......

好吧,那就制造个阿婆婆工具帮助解决这些问题。下面有请ChangeBackgoundColor V1.0阿婆婆工具登场。

6

我们将取色器(手一贱,把GetColor工具更新了)的功能加进来,目的是随心所欲的取色。取色结果在后台自动进行了复制,去完色后,只需按快捷键Ctrl+V粘贴到Source RGB 或者Eraser RGB文本区域中。

1

Eraser按键的作用是擦除那些不必要的干扰物,被设置为状态按钮,点击时激活橡皮檫功能,再次点击时反激活,擦除的半径大小通过Radius微调器设置。

2

有了这款阿婆婆工具,可以快速地为你的女朋友,为你的男朋友一键换证件照底色啦,赤橙黄绿青蓝紫,想怎么换就怎么换......

7

今天的介绍就到此结束了,对这款工具感兴趣的朋友们,请在VXGZH后台回复关键词 changebgcolor 获取工具以及相关的代码。祝好!

更多关于该工具的使用方法,请移步下面的视频演示!

【参考资料】