yumetodoの旅とプログラミングとかの記録

旅や登山の記録やプログラミング関連の話とかフリーソフト紹介とか

いまさらwaif2x-cafeでノイズ除去やってみた

はじめに

今日多摩湖までドライブしてきたのだが、デジカメを持っていき忘れてカメラがiPod touch 6thの糞カメラしかなかった。一応露光時間を伸ばしたんだが、使ってるカメラアプリのISOのいじり方がわからなくて(執筆時にわかった)、めっちゃノイズが乗っている。

origin

Paint.NETで処理

普段使っている画像処理ソフトがPaint.NETなのだが、これのノイズ除去とか表面ぼかしとかグローとかシャープとかを駆使していじってみたのがこれだ

fix

緑系ノイズに引っ張られたり、ノイズを消すために多めにぼかしたりしないといけなくなった。

waif2x-cafe導入

ここは深層学習のちからを借りてみたい。

github.com

から最新版(1.2.0.2)をDLしてきた。

またせっかくGTX 750tiを積んでいるPCなのでcuDNNを使いたいので、NVIDIAにdevelopper登録して
NVIDIA cuDNN | NVIDIA Developer
からDownload cuDNNに進んでDownload cuDNN v7.4.2 (Dec 14, 2018), for CUDA 10.0からcuDNN Library for Windows 10を選んでダウンロードした。

zipを展開してbinの中にcudnn64_7.dllがあるのでこれをwaif2x-cafeのフォルダにコピーした。

waif2x-cafe

(UpPhoto)(noise)(Level3)(tta)

(UpPhoto)(noise)(Level3)(tta)をかけてみた

(UpPhoto)(noise)(Level3)(tta)

まだだいぶノイズが乗っている。

(UpPhoto)(noise)(Level3)(tta)(UpPhoto)(noise)(Level3)(tta)

(UpPhoto)(noise)(Level3)(tta)を二回がけしてみた

(UpPhoto)(noise)(Level3)(tta)(UpPhoto)(noise)(Level3)(tta)

だいぶ緑系のノイズが減ってきた。

(UpPhoto)(noise)(Level3)(tta)(UpPhoto)(noise)(Level3)(tta)_fix(UpPhoto)(noise)(Level3)(tta)

(UpPhoto)(noise)(Level3)(tta)を二回がけしてPaint.netでノイズ除去(半径10, 強さ0.10)ののちさらに(UpPhoto)(noise)(Level3)(tta)をかけて見た結果。

(UpPhoto)(noise)(Level3)(tta)(UpPhoto)(noise)(Level3)(tta)_fix(UpPhoto)(noise)(Level3)(tta)

緑系ノイズに惑わされずにノイズを大幅に低減できた。

(UpPhoto)(noise)(Level3)(tta)(UpPhoto)(noise)(Level3)(tta)fix(UpPhoto)(noise)(Level3)(tta)fix

上にさらにPaint.NETで明るさとかぼかしをいじってみた

(UpPhoto)(noise)(Level3)(tta)(UpPhoto)(noise)(Level3)(tta)_fix(UpPhoto)(noise)(Level3)(tta)_fix

比較

オリジナルとPaint.NETだけで頑張ったのとwaif2x-cafeとPaint.NET併用でやってみたのを比べる

オリジナル Paint.NETのみ waif2x-cafeとPaint.NET併用
origin fix (UpPhoto)(noise)(Level3)(tta)(UpPhoto)(noise)(Level3)(tta)_fix(UpPhoto)(noise)(Level3)(tta)_fix

結論

デジカメを持っていって撮影しよう

C++++++++++++++++++++

をみて文脈なんて考えずに反射的に

#include <cstddef>
#include <type_traits>
template<std::size_t N>
struct Plus : std::integral_constant<std::size_t, N> {
Plus<N + 1> operator ++(int) { return {}; }
};

int main()
{
    Plus<0> C;
    C++++++++++++++++++++;
}

wandbox.org

というコードを投げてしまった。

struct X {
  X& operator++(int) { return *this; }
};

int main()
{
    X C;
    C++++++++++++++++++++;
}

wandbox.org

なんてコードも飛んできた。

あっ

今日もC++界隈は平和です。

はてなブログのあんたがたにあけおめ難易度高い数独

あけおめ

あけましておめでとうございます。今年もよろしくおねがいします。

問題

iOS数独アプリを解いていたらとんでもない難問に遭遇したので。

局面は

img

黒字が初期配置で青字が埋めたところ。

解いてみるとわかるが、左側が結構すんなり埋まる一方右側がさっぱり埋まらない。

此処から先、さっぱり埋まらず唸っていた。

ちょうど年末年始なのでいた、数独が自分よりできる父親に紙に書きうつして投げたところ、やっぱり唸っていた。

6時間ほどに渡る熟考の末、打開に成功した。

注目した箇所

右中段に注目する。まずは抜き出してみよう

img

ここで一旦15を取り除いてみる。

img

さて、8を見てみる。8は上と下に分かれている。これが上のときと下のときで場合分けしてみよう。

case1: 8が下

img

この様になる。下段が1,2,4,6,8が可能性があるが、1,6が入る余地が無いので6が右中で確定する。すると9が左中に確定し中央の3が確定する。

case2: 8が上

img

この様になる。上段が1,5,7,8の可能性があるが、1が入る余地が無い。

すると下段は1,2,4,6が可能性があるが、6が入る余地が無いので6が右中で確定する。すると9が左中に確定し中央の3が確定する。

場合分けまとめ
確定 未確定
上段 5,7
1,8
下段 2,4 8,1

1,8はX字依存。

中段はいずれにせよ9,3,6の順で確定する。

その後

9,3,6の順で確定したのを利用すると特に悩む余地なく素直に解ける。

img

このアプリは全部埋まると盤面が見れなくなるので一手前の画像。