タイトルはnysyo談 筆者はプログラム的な発表をしたことが無かった →引退前に、pythonで絵を関数に変換しよう!
したごしらえ
まずは画像を用意する。54代のS氏のみすちゃんだと思う。違ったらごめん
仰々しくフォトショでみすちゃんだけ抜いて解像度を下げる
ほい(124*124)
import cv2 # グレースケールで読み込み gray_img = cv2.imread("image0.png", 0) # エッジ検出 canny_img = cv2.Canny(gray_img, 150, 150) # canny # 書き込み cv2.imwrite("cannyG.jpg", canny_img)
巡回セールスマン問題を解いて一筆書きに変換しよう!
さてさて、かわいいみすちゃんが出来上がってるはずだぜ。
う、うわぁ。上下反転してるしなんかきもいw
完全ランダムの点群だとこのように最適化が難しい。
仕方がないのでアウトラインで試してみよう。上下逆なのは面倒なので素材を変更して対応する。 アウトラインなら綺麗に一筆書きにできました。
フーリエ変換をして関数にしよう!
フーリエ変換をしてx軸y軸それぞれの方向で時間軸と周波数軸の変換を行う(軸軸うるせえ!) ついでに数式処理ソフトウェアに読み込める文字列にする。
import numpy as np import cmath import matplotlib.pyplot as plt data = np.loadtxt("bestofbest.csv", # 読み込みたいファイルのパス delimiter=",", # ファイルの区切り文字 skiprows=1 # 先頭の何行を無視するか(指定した行数までは読み込まない) ) def dft(f): n = len(f) Y = [] N = 20 # 解像度 for t in range(N): y = 0j for x in range(n): a = 2 * cmath.pi * t * x / n y += f[x] * cmath.e**(-1j * a) Y.append(y) return Y x_list = data[:, 0] y_list = data[:, 1] x_dft = dft(x_list) y_dft = dft(y_list) x_dft_real = np.real(x_dft) y_dft_real = np.real(y_dft) x_dft_imag = np.imag(x_dft) y_dft_imag = np.imag(y_dft) w = np.fft.irfft(x_dft) h = np.fft.irfft(y_dft) """np.sqrt(x_dft_real[j]*x_dft_real[j] +x_dft_imag[j]*x_dft_imag[j])/len(x_dft)*2 np.arctan2(x_dft_real[j],-1*x_dft_imag)""" with open("x_dft.txt", mode='w') as f: f.write("x := ") for i in range(len(x_dft_real)): f.write("("+str(np.sqrt(x_dft_real[i]*x_dft_real[i] + x_dft_imag[i]*x_dft_imag[i]))+")sin("+str( np.arctan2(x_dft_real[i], -1*x_dft_imag[i]))+"+"+str(i)+"*theta)") if i == len(x_dft_real)-1: f.write(":") break f.write("\n+") with open("y_dft.txt", mode='w') as f: f.write("y := ") for i in range(len(y_dft_real)): f.write("("+str(np.sqrt(y_dft_real[i]*y_dft_real[i] + y_dft_imag[i]*y_dft_imag[i]))+")sin("+str( np.arctan2(y_dft_real[i], -1*y_dft_imag[i]))+"+"+str(i)+"*theta)") if i == len(y_dft_real)-1: f.write(":") break f.write("\n+") print("Created files.") plt.plot(w, h) plt.show()
これがみすちゃん関数だ!!!!
x軸
x := (34974.0)sin(1.5707963267948966+0*theta) +(9050.138822799194)sin(2.267341587806863+1*theta) +(886.0316851060844)sin(0.38851646264756323+2*theta) +(749.2401368765334)sin(0.5291512692729754+3*theta) +(425.14205310513)sin(1.5710726987170058+4*theta) +(317.13684727971656)sin(1.0283562611064785+5*theta) +(739.8248124270011)sin(-2.0019596536842266+6*theta) +(266.3313976870815)sin(1.3627798014631836+7*theta) +(423.36328086129333)sin(-0.565448034946528+8*theta) +(296.37318897452417)sin(1.876110950173759+9*theta) +(413.43427978373956)sin(-1.7689167446954908+10*theta) +(266.32523918330764)sin(-2.490656007886714+11*theta) +(218.1291113357074)sin(-1.9579221078460345+12*theta) +(188.3280971905402)sin(0.7589820069765549+13*theta) +(116.81748944126637)sin(2.4114555858159696+14*theta) +(162.78147169309597)sin(-1.5888401010694209+15*theta) +(21.78028469814579)sin(0.9663127087536325+16*theta) +(209.85353861188472)sin(-1.9011667590184278+17*theta) +(168.75598893162928)sin(-1.3505435772927352+18*theta) +(144.4451605300347)sin(-1.734394272256021+19*theta) +(56.34999764070094)sin(2.0126835203554463+20*theta) +(146.02058531950127)sin(2.0074637184676636+21*theta) +(77.74003922904227)sin(0.44568273105803236+22*theta) +(95.12486088953676)sin(1.675042627660483+23*theta) +(162.55691397467712)sin(-2.300261412986466+24*theta) +(67.45935568925448)sin(-1.9375626663750225+25*theta) +(48.0003214449879)sin(-0.996573690021064+26*theta) +(4.494193319709665)sin(2.748825768795675+27*theta) +(10.031482490499618)sin(0.4703042012095713+28*theta) +(78.18807721239371)sin(2.315004922062205+29*theta) +(67.47482272931343)sin(1.6334216955831147+30*theta) +(46.50422423248715)sin(1.2349517898443736+31*theta) +(21.01729840549134)sin(-2.9538776162366314+32*theta) +(35.44814703973424)sin(-1.9956787889374084+33*theta) +(29.355636880944285)sin(2.806471651767326+34*theta) +(18.321209471148695)sin(2.3738022966369656+35*theta) +(25.349097257865843)sin(-1.8897359167530445+36*theta) +(10.729858672362647)sin(1.079898530915059+37*theta) +(20.31135784676711)sin(-2.1340037162759025+38*theta) +(36.43792922600436)sin(0.6786731602812706+39*theta) +(40.701812268763284)sin(-0.6206921283463469+40*theta) +(19.52885351111496)sin(0.024797657978342783+41*theta) +(23.749357331495197)sin(-2.835961856734742+42*theta) +(17.05040225061779)sin(2.515830486899962+43*theta) +(15.115190270889364)sin(0.10144055997616916+44*theta) +(25.318411332854453)sin(0.040816970874781845+45*theta) +(11.24322523347303)sin(-2.252528311753943+46*theta) +(11.956581818272888)sin(0.2108689182210156+47*theta) +(25.391262378286786)sin(1.277277533733728+48*theta) +(13.575654766280213)sin(0.33346768841456886+49*theta) +(30.264240855068444)sin(2.341601050295465+50*theta) +(19.43773047324765)sin(-3.005593609633857+51*theta) +(14.470924964699181)sin(2.5945980901079393+52*theta) +(8.70434955099616)sin(-2.2014870589001925+53*theta) +(8.811708524187788)sin(-1.703994053236503+54*theta) +(17.78731795374084)sin(-1.4115527075247007+55*theta) +(10.285484839638007)sin(-0.06033416050643512+56*theta) +(11.629174283091498)sin(0.9956651730879078+57*theta) +(17.629026974071948)sin(-0.7523417766980669+58*theta) +(23.215316023965517)sin(-0.12166718173691593+59*theta) +(1.8231749863242654)sin(2.2964968061947713+60*theta) +(10.96907841559924)sin(-1.8734859017441954+61*theta) +(19.92714857556945)sin(-0.08362633419832742+62*theta) +(5.552616505028343)sin(-1.1517003650152342+63*theta) +(14.715849848283922)sin(0.22579686833682158+64*theta) +(10.392273394921883)sin(-0.7113549425510444+65*theta) +(9.825173542821913)sin(0.31087484140359967+66*theta) +(11.566204912622794)sin(0.11675290367419068+67*theta) +(16.505536454773686)sin(-0.847690244087027+68*theta) +(9.594683916777926)sin(-2.459415376768953+69*theta) +(11.768652423462184)sin(-0.3194958000522237+70*theta) +(7.482925264296918)sin(2.0155616185489347+71*theta) +(11.295893838262224)sin(-0.6067538949222219+72*theta) +(11.713653185243954)sin(1.8342694339416368+73*theta) +(2.43321768130421)sin(-2.8999829340082104+74*theta) +(5.052032897909473)sin(-1.2397526311095162+75*theta) +(12.075531812331695)sin(-1.0757933086700886+76*theta) +(5.84610213655875)sin(-2.277973909289044+77*theta) +(6.302128265857963)sin(-1.276139261891948+78*theta) +(8.993390227968755)sin(2.209073352148865+79*theta) +(8.513538406542336)sin(-0.4870199669425526+80*theta) +(10.308817530112744)sin(-0.15629258400004328+81*theta) +(12.117718797191673)sin(-0.1257141102886096+82*theta) +(9.8725183828858)sin(-1.1242092430154202+83*theta) +(9.03680128139072)sin(-0.06263635495781415+84*theta) +(9.749928379200018)sin(-0.24716940109634258+85*theta) +(3.130581463365143)sin(-2.423721594506868+86*theta) +(2.0090809486878696)sin(1.8737759710804438+87*theta) +(9.90868019616687)sin(-1.5547112054099654+88*theta) +(6.175276671784773)sin(-0.6613274393898345+89*theta) +(8.245469379101506)sin(-1.5609587331663273+90*theta) +(5.346344725454909)sin(-0.23157798869583127+91*theta) +(12.958817018335784)sin(-0.1337314716537506+92*theta) +(3.719432540476971)sin(-1.44470931665629+93*theta) +(3.939941034560307)sin(1.140937480944931+94*theta) +(6.192969273455028)sin(-0.7271204095119294+95*theta) +(7.689294312373138)sin(0.4849427635543728+96*theta) +(7.608260581369542)sin(-0.5658574937434951+97*theta) +(2.378683565972801)sin(0.28275567610779484+98*theta) +(6.769948692744841)sin(-0.015683482987251175+99*theta):
y軸
y := (32033.0)sin(1.5707963267948966+0*theta) +(14201.100377878678)sin(0.7483979951877484+1*theta) +(577.2808943329476)sin(-0.241921683290122+2*theta) +(559.7895908960994)sin(-2.000869136011776+3*theta) +(419.96849859394786)sin(1.8366740488483522+4*theta) +(637.3232286337192)sin(1.5188895321196463+5*theta) +(315.0396584067336)sin(2.645465664522148+6*theta) +(397.98807776442794)sin(0.9996265270975466+7*theta) +(321.55831665743364)sin(-0.6329729375972493+8*theta) +(147.49097870756364)sin(2.0426086007849995+9*theta) +(613.9770399772019)sin(-1.2316365957439634+10*theta) +(351.69613748417953)sin(1.0997709107711917+11*theta) +(156.38539404664846)sin(-2.75637270397021+12*theta) +(293.66692678714844)sin(-0.5044940275179859+13*theta) +(121.83365126496747)sin(1.8381760411944426+14*theta) +(93.43697131196325)sin(-3.059505343718339+15*theta) +(152.38686156320276)sin(-1.6637690527730606+16*theta) +(150.63118913068817)sin(2.0775120789013006+17*theta) +(102.67142627467231)sin(3.0571562815253803+18*theta) +(56.27450289500083)sin(2.539236859930966+19*theta) +(184.27543899619093)sin(2.801254909721937+20*theta) +(60.58109553167884)sin(-2.431051641035379+21*theta) +(58.6083789555377)sin(2.3859113367652345+22*theta) +(24.432393904453587)sin(1.1522024903421926+23*theta) +(31.412228914208992)sin(-1.4709413137832237+24*theta) +(93.16910459033426)sin(1.0793446182931847+25*theta) +(44.76432258377431)sin(-2.24688614955756+26*theta) +(36.27639426550731)sin(-1.9063380115686768+27*theta) +(25.894340793796825)sin(-0.06553325376543208+28*theta) +(47.93695988457835)sin(-1.6821037025430718+29*theta) +(63.256016397020325)sin(0.04439577649617959+30*theta) +(68.49241295193761)sin(-0.713652532422953+31*theta) +(37.89742956059006)sin(1.130585855286702+32*theta) +(43.529837578404006)sin(-0.6816237111830192+33*theta) +(37.07992250791973)sin(2.7935502249038304+34*theta) +(44.29930328312754)sin(0.19757074438651995+35*theta) +(17.888888065964665)sin(0.1705626975079719+36*theta) +(17.902031262068885)sin(1.5380678765228122+37*theta) +(7.227293616163571)sin(0.2817856698531246+38*theta) +(45.035557876809854)sin(2.676065814084757+39*theta) +(15.248172322603157)sin(-2.0884993325779737+40*theta) +(33.87978226974714)sin(-2.754677781653806+41*theta) +(12.285872218193186)sin(-1.2418709929322995+42*theta) +(22.770611434127453)sin(-2.6425355863473445+43*theta) +(4.743842992974714)sin(-2.0928687797114267+44*theta) +(25.730474583321293)sin(2.9667907366379396+45*theta) +(33.090152866234234)sin(-2.853807876130099+46*theta) +(29.571799476416174)sin(-2.7749460151053444+47*theta) +(16.98428997356901)sin(3.123607209894946+48*theta) +(15.937653166602804)sin(-1.5772576495860888+49*theta) +(20.290348216645146)sin(0.07270693796022637+50*theta) +(11.012582709486026)sin(1.0937470250162058+51*theta) +(10.581510333131757)sin(-2.7815434206781213+52*theta) +(36.22274172652065)sin(0.9401796201624125+53*theta) +(18.134423332749233)sin(-1.2145879468534766+54*theta) +(26.89524914108621)sin(1.5858763554439377+55*theta) +(7.096169779291482)sin(-0.09419318484985789+56*theta) +(29.764283858364838)sin(1.9360743955324056+57*theta) +(19.039837763846723)sin(0.20905554097841125+58*theta) +(11.221177068297706)sin(-3.043243422153552+59*theta) +(14.170663859632334)sin(2.6091886890989793+60*theta) +(6.751199451274523)sin(-1.1880545352816914+61*theta) +(25.46778908445606)sin(2.4323773927953676+62*theta) +(9.390086362154621)sin(-1.9852069091546876+63*theta) +(27.06666479533798)sin(2.769645970476025+64*theta) +(18.071807383499767)sin(1.8593740930223948+65*theta) +(19.804237864253622)sin(-2.4929892426310687+66*theta) +(7.245411696368156)sin(0.02906688913246624+67*theta) +(17.783629759896684)sin(-2.3110647438847782+68*theta) +(5.914523583084507)sin(-2.290444898059375+69*theta) +(4.099646165612632)sin(-2.7286748272503694+70*theta) +(4.6947801327031575)sin(0.9684315575399872+71*theta) +(10.276081537224366)sin(-0.2631633041002387+72*theta) +(7.5493063764607795)sin(-2.6953731131315655+73*theta) +(3.4549731605693137)sin(-0.9629165347984274+74*theta) +(11.113841606061218)sin(2.019019811794397+75*theta) +(8.220747894542079)sin(2.866450797041906+76*theta) +(6.604644681537263)sin(1.571417049519325+77*theta) +(17.54762041265197)sin(1.9053383563723418+78*theta) +(10.039808904161383)sin(0.24814141111415858+79*theta) +(13.739153156500958)sin(2.2072507239525563+80*theta) +(6.883261638288223)sin(0.6517610740935016+81*theta) +(15.46496942136173)sin(2.050566007826554+82*theta) +(9.272841412423535)sin(1.9615110971326801+83*theta) +(7.016971305291619)sin(1.7344090891892066+84*theta) +(3.7764863443643475)sin(-2.4577183385575965+85*theta) +(14.059053133000578)sin(-1.1262191914823332+86*theta) +(6.275612420412505)sin(-2.992963485357378+87*theta) +(2.679794595500572)sin(2.1873064627987073+88*theta) +(4.53152419782687)sin(-2.928022494788396+89*theta) +(3.1032841761631285)sin(0.8179006341211016+90*theta) +(5.313963180573108)sin(-2.2774942579361444+91*theta) +(4.423242364940191)sin(-2.932242434397683+92*theta) +(4.33686081386715)sin(0.25282916737903194+93*theta) +(2.0242986566368764)sin(-1.3839903876837882+94*theta) +(4.110081376979299)sin(0.3188925794517382+95*theta) +(3.1888142205286876)sin(2.204123616711247+96*theta) +(4.7786363861891505)sin(0.2043432106782523+97*theta) +(5.302959883537051)sin(1.2961791923996968+98*theta) +(2.707878673148387)sin(-1.760681958336304+99*theta):
ぷろっとしたようす↓
明日のカウントダウンカレンダー3日目は53代オダマキさんの記事です。 オダマキ君愛してる
おわり