2023年度プロジェクトリサーチプロジェクトリサーチ　活動報告書関数アート 企画番号5アドバイザー：高橋隆史メンバー：佐部利旭、大久保侑也
概要
ある画像に対してフーリエ級数展開を実行する事でその画像を三角関数で表現される式として描く。
目的
この活動の目的は、フーリエ級数展開を実行により三角関数を用いて様々な曲線を数式として表現することである。
計画
この活動の計画は、画像を読み込み、描きたい図形の座標を取得する。取得した座標をx成分とy成分に分けた後、それらを用いて区分求積法による積分を実行すれば、描くべき関数が求められるというものである。
調査方法
最初はそれぞれのメンバーで役割を分担して活動を進める。 (佐部利)複素フーリエ級数展開についての理解を深める。大学の講義により実フーリエ級数展開は学習済みである為、実フーリエ級数展開が成立するものとして学習を進める。 (大久保) Pythonを用いた関数の描画方法の学習やフーリエ級数展開のための積分をするプログラムの作成にあたる。これ以降はそれぞれのメンバーが共同して活動を進める。積分を区分求積法によるものに変えたプログラムを作成する。 OpenCVを用いた画像の取り扱い方を学ぶ。具体的には、画像の読み込みや描く図形の輪郭を抽出する方法を学習する。最後に、画像の読み込みと輪郭の抽出、積分の実行によるフーリエ係数の導出、関数の描画を合わせて図形を描く。 ※抽出した座標を用いた積分（区分求積法）について、描画すべき関数が分からなくても抽出した座標が関数上の点であると考えれば、区分求積法による積分が可能になる。
活動経過
活動経過は以下のとおりである。 6月15日　活動準備（実フーリエ級数展開の復習） ７月6日　活動開始（複素フーリエ級数展開、Pythonを用いた関数描画方法の学習） 8月22日  OpenCVによる画像の読み込み、輪郭の抽出方法の学習8月29日　画像の読み込みと輪郭の抽出、積分の実行、関数の描画を行うプログラムの作成9月14日 プログラム完成10月28・29日　ポスターセッション成果・結果等完成したプログラムについて、簡単な図形であれば上手く描画する事が出来た。しかし、複雑な図形では線が二重になった。また一筆書き不可能な図形などの場合、意図しない点と点が線で結ばれるなどの課題が見られた。 (元画像) (描画した画像) ➡星形であると認識できる具合には、描画できているが、部分的に線が重なっている箇所がある。
式として表現すると以下のようになる。
f x ( t ) = 1012.992 + 2.302 cos ξ t − 216.683 sin ξ + 0.323 cos墨t − 14.955 sin墨t + 0.555 cos墨t − 17.675 sin墨t +2.244 cos 4 t − 52.664 sin H t − 1.802 cos H t + 33.871 sin H t − 1.021 cos H t + 16.018 sin H t +1.786 cos H t − 23.937 sin H t − 1.785 cos H t + 20.98 sin H t − 0.148 cos H t + 1.557 sin H t -1.474 cosֲֲֲֲֲֲֲt − 13.728 sinֲֲֲֲt − 1.347 cosְְֲַָּt + 11.43 sin̸ָּ= t + 1.202 cos̸ָּ= t − 9.34 sin ¹ָּ= t -0.502 cos 15 t − 3.584 sin 13 t − 1.813 cos 14 t + 12.07 sin 14 t + 1.61 cos 15 t − 10.051 sin 15 t ñt + 2.397 sin ¹ֲצπ t − 1.528 cos ¹ֲצπ t + 8.321 sin ¹ֲצπ t + 1.774 cos ¹ֲצπ t − 9.184 sin ¹ֲצπ t -0.857 cos 1f t + 4.175 sin 1f t − 0.321 cos海t + 1.495 sin 2f t + 1.657 cos 2f t − 7.325 sin 2 =t + 6.749 sin ² =t + 7.459 sin 2 ⁄ π t + 1.098 cos 2 ⁄ π t − 3.854 sin 2 ⁄ π t + 0.365 cos ⁄ 27ミt — 1.224 sin −2.032 cos 25 = t + 4.931 sin 2 c t + 1.698 cos 2 π t − 5.344 sin 2 π t − 0.539 cos 3 π t + 1.648 sin 3 −1.506 cos 25 f y ( t ) = −756.3 − 259.739 cos ξt − 2.771 sin ξt + 55.582 cos気t + 1.169 sinヶt + 8.817 cos ☞ t + 0.28 sin ☞ t +42.762 cos H t + 1.827 sin H t + 10.094 cos H t + 0.531 sin H t + 12.441 cos H t + 0.789 sin H t -0.524 cos 7 =t + 0.03 sinﾌﾟ=t + 1.623 cos ∂ t + 0.141 sin ∂ t − 4.306 cos ∂ t − 0.416 sin ∂ t − 0.416 sin ∂ t − 0.173 sinﾌﾟ=t + 0.03 sinﾌﾟ=t + 0.452 sinﾌﾟ=t +0.337 cos 1 +1.417 cos ¹ֲצ=t + 0.194 sinﾌ³ֲצ=t + 2.946 cosﾌｷﾀﾆt + 0.434 sinﾌｷﾀﾆt + 0.836 cosﾌｷﾀﾆt + 0.15 sin ¹ֲצ=t +1.343 cos 1 fst + 0.247 sin 1 fst − 0.881 cos 1 fst − 0.164 sin 1 fst + 0.066 cos 1 fst + 0.004 sin −0.877 cos 1 ⁄ π t − 0.185 sin 1 ⁄ π t + 0.487 cos 2 ⁄ π t + 0.101 sin 2 ⁄ π t + 0.132 cos 2 ⁄ π t + 0.032 sin i +0.951 cos ²ֲརྲ t + 0.223 sin ²ֲརྲ t + 0.582 cos ²ֲརྲ t + 0.14 sin ²ֲརྲ t + 1.04 cos ²ֲརྲ t + 0.273 sin ²ֲ−0.045 cos 2 ⁄ π t − 0.01 sin 2 ⁄ π t + 0.225 cos 2 ⁄ π t + 0.06 sin 2 ⁄ π t − 0.441 cos 2̸π t − 0.131 sin 2 ⁄ π +0.023 cos 2gst + 0.005 sin 2gst − 0.22 cos 2gst − 0.065 sin 2gst + 0.293 cos 2gst + 0.099 sin 2gst (元画像) (描画した両像) ➡輪郭として抽出する際に、OpenCVのfind Contours関数を用いているが、円の内側と外側を別の輪郭として座標を抽出してしまっている為、線が二重になっている。以下に示すように、この図形の場合は特別に抽出した座標の前半部分を使用する事で問題を解決できる。これは抽出する座標の順番によるものである。 (修正前に描画した画像) (修正前の座標) (修正後に描画した画像)
参考資料
フーリエ解析　馬場敬之　マセマ出版社　令和3年12月16日　改訂8　初版発行(演習)フーリエ解析　馬場敬之　マセマ出版社　令和４年11月1日　改訂１　初版発行OpenCVによる画像処理入門　講談社　小枝正直、上田悦子、中村恭之2022年12月6日　第1刷発行Hatena Blog    Python   輪郭の検出とその座標の抽出「OpenCV」 https://hk29.hatenablog.jp/entry/2020/02/01/162533 Pystyle   OpenCV-findContoursで画像から輪郭を抽出する方法https://pystyle.info/opency-find-contours/#outline  1 Qiita   OpenCVで画像の平滑化をしてみたhttps://qiita.com/shoku-pan/items/07ec25f1d50629fed698 findcontours関数のまとめhttps://qiita.com/anyamaru/items/fd3d894966a98098376c#:~:text=OpenCV%E3%81%A7%E7%94 %BB%E5%83%8F%E3%81%AE%E8%BC%AA%E9%83%AD%E6%8A%BD%E5%87%BA%E3 %82%92%E8%A1%8C%E3%81%86%E5%A0%B4%E5%90%88%E3%81%AB%E3%81%AF%E 3%80%81findContours%E3%81%A8%E3%81%84%E3%81%86%E9%96%A2%E6%95%B0%E3 %82%92%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%99%E3%80%82.%E7%AC%AC% E4%B8%80%E5%BC%95%E6%95%B0%E3%81%AB%E5%85%A5%E5%8A%9B%E7%94%BB %E5%83%8F%E3%80%81%E7%AC%AC%E4%BA%8C%E5%BC%95%E6%95%B0%E3%81% AB%E6%8A%BD%E5%87%BA%E3%83%A2%E3%83%BC%E3%83%89%E3%80%81%E7%A C%AC%E4%B8%89%E5%BC%95%E6%95%B0%E3%81%AB%E8%BF%91%E4%BC%BC%E6 %89%8B%E6%B3%95%E3%82%92%E5%8F%96%E3%82%8A%E3%81%BE%E3%81%99%E3 %80%82