Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

2020-01-01から1年間の記事一覧

マンデルブロ集合を描画する

マンデルブロ集合は複素数列{zn}n∈N∪{0} が、n→∞の極限において無限大に発散しないという条件を満たす複素数の集合を指します。Pythonで複素数を扱うcomplex(real, imag)の実部(real)と虚部(imag)を画像のx,yに対応させ各座標で数列が発散するかどうかチェッ…

画像をセピア色に変換する(グレースケール画像を赤く補正する)

劣化した古い白黒写真の茶色っぽい色味をセピア色といいます。画像をセピア色に変換することで古い写真のように見せることができます。セピア色への変換にはいくつか手法がありますが画像をグレースケール変換したのちに、その画素値を元に青が弱く赤が強い…

ルックアップテーブルで画像の色味を調整する(B,G,Rチャンネルを個別に補正する)

ルックアップテーブルはあらかじめ用意された画素値に対応した変換表で画像の調整に用いられます。Pythonの画像処理ライブラリOpenCVのLUTによりB,G,R各チャンネル個別にルックアップテーブルでガンマ補正し画像の色味を変えます。

ルックアップテーブルで画像の彩度、明度を調整する(画像を明るく鮮やかにする)

ルックアップテーブルはあらかじめ用意された画素値に対応した変換表で画像の調整に用いられます。Pythonの画像処理ライブラリOpenCVのLUTにより彩度、明度チャンネル個別にルックアップテーブルでガンマ補正し画像の彩度、明度を変えます。

モンテカルロ法で円周率を求める

モンテカルロ法はシミュレーションや数値計算を乱数を用いて行う手法の総称です。正方形と内接する四分割円を考え、正方形にランダムに多数の点を描画した際に、内接円の中と外にある点の数から円の面積が求まり、そこから円周率が算出できます。

傾いた画像を自動で水平にする

Pythonの画像処理ライブラリOpenCVには領域検出機能(findContours)および回転外接矩形算出機能(minAreaRect)があります。お札が傾いて写った写真からこれらの機能で傾いている角度を算出、求めえた角度を利用し元画像を回転、お札を水平にします

ランダムウォークによる感染シミュレーション

ランダムウォークは確率的な運動モデルの一種で、次にどちらにどれくらい動くかを確率的に決めるため不規則な挙動を示します。2次元のランダムウォークモデルで感染の広がりのシミュレーションを行います。ある領域に50人の人間がいて1人だけ感染症に掛かっ…

エクセルファイルを新規作成、データを入力しグラフを作成する

Pythonのエクセルファイル操作用ライブラリopenpyxlを使うとエクセルワークブックの生成や読み書き、データ入力、グラフ作成などがエクセルを立ち上げずにPython上で行えます。新規ワークブックの作成、データ入力、散布図作成を行います。

新型コロナ陽性者数のアニメーショングラフを作成する

国内の新型コロナウイルス陽性者数のcsvファイルを読み出しグラフにします。Pythonでグラフを作る場合通常ライブラリmatplotlibを使用しますがここでは画像処理ライブラリPillowでアニメーショングラフを描画します。

四角形と三角形の中から三角形だけ抽出する(特定形状の抽出)

四角形と三角形が混在する画像から、三角形のみを抽出します。Pythonの画像処理ライブラリOpenCVの領域検出機能findContoursで図形の領域を抽出、近似図形算出機能approxPolyDPで求めた近似図形の頂点数から三角形かどうかを判断します。

画像が回転する動画

画像が回転するアニメーションを作ります。Pythonの画像処理ライブラリPillowのrotateで画像を回転、cropで画像の中央を切り抜きます。回転角度を変えながら画像を生成しGIFアニメを作ります。

少しずつ画像がはっきりする動画

ぼやけた画像からはっきりした画像へと少しずつ変化する動画を作成します。 Pythonの画像処理ライブラリPillowのモザイク処理やBlurによるぼかし処理を少しずつ弱くして徐々に画像がはっきりするアニメーションGIFを作ります。

複素関数を視覚化する

z=a+bi を用いた複素関数 f(z)において、実部 a、虚部 b に対して偏角 arg z および 絶対値 |r| が決まります。これら4つのパラメータを図示するために実部 a をx軸、虚部 b をy軸とした2次元グラフに、偏角 arg z を対応する色相でプロットする方法がありま…

倍プッシュのシミュレーション

倍プッシュは負けた2倍の額を賭け続けることで必ず勝つというギャンブルの必勝法ですが、手持ちの資金が無くなったら終わりなので大負けするリスクもあります。Pythonで倍プッシュのシミュレーションを行い所持金が増えるかどうかを調べます。

ランダムウォーク

ランダムウォークは確率的な運動モデルの一種で、次にどちらに動くかを確率的に決めるため不規則な挙動を示します。 ここでは2次元のランダムウォークモデルとして、一ステップ毎に上下左右4方向に一定距離ランダムに移動する場合を考えます。ステップ数を10…

いろいろならせんを描く

(1) アルキメデスのらせん(等間隔)、(2) 放物らせん(外側に行くほど間隔が狭くなる)、(3) 双曲らせん(y=aを漸近線に持つらせん)、(4) リチュース(Θが大きくなるにつれ原点に近づくらせん)、(5) 対数らせん(等角螺旋)の5種類のらせんをPythonの画像処理ライブ…

セル・オートマトンによる感染シミュレーション

セル・オートマトンは格子状のセルと単純な規則による離散的計算モデルで、あるセルの時間tにおける状態、および近傍セルの時間tにおける状態により、あるセルの時間t+1(次世代)における状態が決まります。ルールを確定的ではなく確率的に変えた確率的セルオ…

素数を求める(エラトステネスのふるい)

エラトステネスの篩は指定された整数以下の全ての素数を発見するためのアルゴリズムで①探索リストに2からxまでの整数を昇順で入れる②探索リストの先頭の数を素数リストに移動し、その倍数を探索リストから篩い落とす③上記の篩い落とし操作を探索リストの先頭…

素数を求める(試し割り法)

試し割り法は素数を求める手法で、nが素数であるかどうかを調べる場合nよりも小さい数で割って割り切れるかどうか調べるシンプルなアルゴリズムです。効率化するポイントとして①√nまでの数を調べれば十分②小さい数の方が割れる確率が高いため小さい数から調…

ブラシ状の線を描く

Pythonの画像処理ライブラリOpenCVでブラシ状の線を描きます。ある座標から離れると密度が小さくなるよう点を描画することで濃淡をつけ、ブラシ状に見せます。乱数生成ライブラリrandomのgaussによりガウス分布を生成し点の座標を決めます。

リサージュ曲線を描く

リサージュ曲線は直行した2つの単振動の合成による平面図形で、 tを介した媒介表示変数表示では x = Acos(at) y = Bcos(bt+δ) となり、振幅の係数A,B、周波数の係数a,b、位相差δによりさまざまな図形が現れます。 Pythonの画像処理ライブラリOpenCVでリサー…

SIRモデルによる感染シミュレーション(一度低下した感染率が再上昇する場合)

SIRモデル(エスアイアールモデル)は、感染症の短期的な流行過程を決定論的に記述する古典的なモデル方程式で、時間tにおけるSusceptible(未感染者)、Infected(感染者)、Recovered(回復者)を算出できます。条件を変えてSIRシミュレーションを行いPythonのグ…

画像をマトリックス風に変換する

画像を映画マトリックスのような緑色の反転したカタカナで置き換えます。画像をPythonの画像処理ライブラリOpenCVのエッジ検出機能Cannyでエッジ検出し、エッジ部分を反転した緑色のカタカナで置き換えます。

まちまちなサイズの複数の画像をきれいに並べて一枚の画像にまとめる

サイズの異なる複数の画像を一枚の画像にきれいにまとめられると便利です。フォルダ内の画像ファイルをすべて読み出しPythonの画像処理ライブラリOpenCVにより2枚ずつ画像の高さをそろえて横に並べ、すべての画像を一枚の画像に整理します。

2枚の画像を斜めにカットして貼り合わせる

2枚の画像を斜めにカットして貼り合わせます。Pythonの画像処理ライブラリPillowのcompositeメソッドを使うと2枚の画像をマスク画像の形に応じて合成できます。

星のベクター画像を作成する

ドットの集合である普通の画像(ラスター画像)と異なり、ベクター画像は線や円といったオブジェクトの集合として記述されており、拡大縮小してもギザギザになったりせず画像の質が変わらない特徴があります。Pythonのライブラリsvgwriteを使うとベクターファ…

青海波のベクター画像を作成する

日本の伝統的な文様である青海波のベクター画像を作成します。ドットの集合である普通の画像(ラスター画像)と異なり、ベクター画像は線や円といったオブジェクトの集合として記述されており、拡大縮小してもギザギザになったりせず画像の質が変わらない特徴…

星を描く

Pythonの画像処理ライブラリPillowのpolygonメソッドを使って星形を描きます。星を描画する関数starを作り、任意の位置に任意の色、形、角度の星形を描きます。

HTMLタグを自動で付ける

HTMLタグを略字で書いておいて、タグに置き換えます。 例えば H → <h2> S → <span style="color:red"> のような変換の組み合わせをあらかじめ決めておいて読み出したテキストファイルの略字をタグに置換します。 環境 windows10 home Anaconda 3/ jupyter notebook 5.6.0 Python 3.7.0 準</span></h2>…

画像を左右反転して貼る

pythonの画像処理ライブラリPillowを使って画像を左右反転し元画像と合算し一枚の画像にします。 環境 windows10 home Anaconda 3/ jupyter notebook 5.6.0 Python 3.7.0 Pillow 5.2.0 準備 画像ファイルはフリー写真素材ぱくたそからダウンロードさせていた…