#import "../template.typ": *

#show: project.with(
  title: "1",
  authors: ("absolutex",),
)

= 机器视觉实践 二

== 实验目的

图像马赛克：

+ 编程实现图像局部区域马赛克
+ 要求算法具有交互性，能指定局部区域和马赛克大小
+ 具体实现方法不限
+ 编程语言不限，可通过C++，Python 或 Matlab 实现

== 实验内容

马赛克的实现原理非常简单，遍历图像的每个像素，并根据马赛克块的大小进行分组。对于每个马赛克块，计算该块内所有像素的平均颜色值，或使用块内某个像素的颜色值。

#include_code("../src/mosaic/__init__.py")

我用了两种方法，第一个是使用鼠标笔刷绘制马赛克区域，第二个是矩形区域。绘制过程中可以使用鼠标滚轮调节马赛克块的大小。

每一个马赛克块都使用其中心点作为马赛克的颜色，这样可以减少一点计算量。

== 实验结果

#figure(
  image("brush.jpg", width: 100%),
  caption: [笔刷绘制马赛克 效果图],
)

#figure(
  image("square.jpg", width: 100%),
  caption: [矩形区域绘制马赛克 效果图],
)

== 心得体会

实践过程中发现有拖影的情况，即前面一次使用的马赛克色块在后续过程中又被使用，造成颜色重复的现象。解决这个问题需要在绘制马赛克时从原图像上采样，而不能从绘制后的图像上采样；并且采样点不能选择马赛克块的边缘点，而是需要选择中心点。