博主头像
御坂誉

Vertin - Misaka Foundation

头图

Mathematica!

$\nwarrow$ 左上角那条分割线的Mathematica处理


原本的图片是这个样子的

2252397_W2xEX_webp_waifu2x_4x_3n_png.webp
2252397_W2xEX_webp_waifu2x_4x_3n_png.webp

如果把黑色背景去掉至透明然后直接用的话,暗色模式是可以的,亮色模式下因为图形是白的就会看不见。于是想做一个轮廓勾勒,这样暗色亮色就都能看到了。

用Mathematica的Binarize首先进行二值化得到更锐利的图片方便后面操作

1.webp
1.webp

之后用Dilation把线条做粗一点,如果不这样的话待会勾勒完在暗色模式下线条末端会消失在背景中

2.webp
2.webp

然后EdgeDetect得到边框的轮廓,并再次Dilation调整线条

3.webp
3.webp

为了使轮廓在暗色的时候完美融入背景,我们要先反色,然后修改边框的颜色为背景色RGB(29,31,32)

o = Image[
   Replace[ImageData[e], {1 -> {29/255, 31/255, 32/255}, 
     0 -> {1, 1, 1}}, {2}], ColorSpace -> "RGB"];

这里我们读取每个像素的颜色,如果是1(白色)就换成背景色,是0(黑色)就换成白色,这一规则应用是在第二层进行的。其中e是之前得到的轮廓图。这时再去掉白色背景就行了( ̄︶ ̄)↗ 

4.webp
4.webp

接下来我们还可以通过

p = {#2, -#1} & @@@ 
   Position[ImageData[Thinning @ image], 1, {2}];
ListPlot[p, AspectRatio -> Automatic, Axes -> False]

来得到在图3中颜色值为1(即白色)的点的坐标,这样可以完成在图像边缘取点的任务。

Mathematica!
https://misaka-yu.com/archives/114/
本文作者 vertinme
发布时间 2024-11-18
许可协议 CC BY-NC-SA 4.0
已有 4 条评论
  1. 评论头像

    Well,highlight.js在Mathematica上的着色看起来不是很好(/ω\)

    vertinme 博主 November 18th, 2024 at 07:35 pm 回复
    1. 评论头像

      做的好细节!不过本主题默认的 highlight.js 没有加入 Mathematica 这个东西(为了体积考虑,而且我也没用过233),或许你可以重新打包一份适合自己的 js 然后替换

      MoXiify November 18th, 2024 at 08:30 pm 回复
      1. 评论头像

        谢谢~q(≧▽≦q)
        嗯嗯我已经替换成字节CDN的highlight.js了,但是疑似它本身对Mathematica的支持就有一些问题2333

        vertinme 博主 November 18th, 2024 at 08:40 pm 回复
        1. 评论头像

          ╮(╯▽╰)╭ 那可能就没办法了,再折腾就麻烦了

          MoXiify November 18th, 2024 at 08:41 pm 回复
发表新评论