滑らかに保ちながらアップスケールする必要がある RGBA 画像があります。
問題は、色をそのままにしておく必要があることです (背景: 州が色分けされている地図のサイズを変更しています)。スムージング中のピクセルの色。
したがって、滑らかなエッジを得るために、最近傍を使用してアップスケールし(階段パターンを与えます)、ターゲット画像の各ピクセルを特定の半径内で最も頻繁に発生するピクセルの色に置き換えることでエッジを丸めることを望んでいました。ラ そう:
from PIL import Image, ImageFilter
amount=3
image=Image.open(<file>)
image=image.filter(ImageFilter.ModeFilter(amount))
これは、PIL の ImageFilters が各チャネルで個別に動作するため、機能しないことを除いて、かなり迅速に終了します。拳を振る
私はnumpy配列に頼って、ループで次のことをしようとしました:
dest[x,y]=Counter([tuple(e) for e in reshape(source[max(x-r,0):x+r+1,max(y-r,0):y+r+1],(-1,4))]).most_common()[0][0]
ここでの dest と source は同じ形状の XxYx4 配列であるため、再形成とタプルへの変換が必要であることに注意してください。理論的にはこれでうまくいきますが、私が操作している8,200 万ピクセル
の画像
を完了するには 12 時間かかります。これは主に、キャストと再形成による不要なオーバーヘッドが原因であると推測しています。
Python でこれを行う適切な方法は何でしょうか?
このタスクを実行するための C++ モジュールを作成する準備が整いました。
この道から私を遠ざけるものは何でも大歓迎です!