做好看的图片 ——加粗图片中的所有线条

有没有遇到过这种事情:写了一篇文章,还画了一个自己觉得还不错的系统示意图,很高兴的给老板看。老板看了,先是表扬了你一下,然后开始说意见了:“这个图的线条有点太细了,粗点会好看一些。那个地方弄一个倒角,比直角好看一些。”诸如等等。对你来说还有啥选择,回去改呗。

其他的问题好像都还好弄。就是把所有线条变粗比较麻烦。如果图是PPT做的,没法全选所有线条然后修改线宽,再说即使能,也只能变成一样宽。还有一些图是从AutoCAD里面导出来的,也只能一条一条来设置。当然解决方法是有的,反正有的是时间,那就一条一条设置呗,反正最多一个小时。还有更郁闷的时候,原文件都已经找不到了,只剩下最后的效果图了。要修改的话就要重做一遍了。可是假设老板还是不满意呢?对他来说只是一句话,可是每一句话就费了你宝贵的一个小时喝咖啡的时间。也许还有高端的做法吧,比如Photoshop,先膨胀然后再增加对比度等等。不过反正我是对Photoshop那么多搞不清楚功能的按钮很恐惧。

如果用MATLAB的话,解决起来还是比较容易的,代码也不复杂。为了把事情说的更清楚一些,代码再加点注释。

clear all;

clc;

inputfile = ‘Fig1.bmp’; % 输入的图像文件名,MATLAB支持的文件格式还是比较多的,所以不用担心

outputfile = ‘Fig1_2’; % 输出的文件名,可以不加后缀

outputfileformat = ‘png’; % 输出的文件格式。包含了很多常用的格式:比如’bmp’,’gif’, ‘jpg’, ‘png’, ‘tiff’等等。

thickness = 2; % 设置膨胀的宽度,越大则结果越粗

b=imread(inputfile);  % 读入图像文件

b=im2bw(b);           % 将图像转换成黑白二值图像

a=~b;                 % 黑白互换

se = strel(‘rectangle’, [thickness thickness]);  % 设置一个矩形区间

bw2 = ~(imdilate(a,se)); % 处理图像

imwrite(bw2, [outputfile ‘.’ outputfileformat],outputfileformat); % 将处理好的图像写入文件

% 以下为显示处理前与处理后的图像,可以删去

figure(‘color’,’w’)

subplot(1,2,1)

imshow(b);

title(‘Before’)

subplot(1,2,2)

imshow(bw2)

title(‘after’);

 

这里头最重要的代码其实就2行。strel是用来设置作用元素。这里是使用了矩形的元素,因为只是为了增加像素的宽度,这里的宽度是2, 如果需要更粗,只需要增加这个数字就可以了。其实还可以定义很多样式的,比如椭圆,或者沿着某个方向等。dilate函数是对图像做膨胀操作,用的元素就是上面的strel函数设置的。

下面是对照的图:(thickness=2)

img15

不过得先说一下,这个不是终极解决方案。因为处理的对象是黑白图形。如果是彩色的呢?呃,我也要去想想,终归是有非常省事的解决方法的。

发表评论

Your email address will not be published.

X

已达到阅读文章上限。免费订阅,获取更多

已达到阅读文章上限。免费订阅,获取更多
关于科研写作和学术出版的文章与学术资源,包括:

  • 820 +文章
  • 15+ 免费在线讲座
  • 10+ 专家播客
  • 10+ 电子书
  • 10+ 检查清单
  • 50+ 信息图