AutoSplitterの進化
公開日: 2026年10月27日
2012年 – 角を検出する
AutoSplitterの開発を始めたとき、参考にできるものはほとんどありませんでした。フラットベッドスキャナーのメーカーが提供していた基本的なスキャンソフトだけを試したことがありましたが、機能はかなり不十分でした。
もっと良いものを作りたいと思い、テストに使えるのは自分のスキャナーと家族の写真だけでした。写真は黄ばんだアルバムに貼られていたわけではなく、段ボール箱にまとめて入っていただけです。
そのため、ほとんどの人にとって、フラットベッドスキャナーの白っぽい背景に写真を置いてスキャンするのが唯一の使用例だろうと考えました。
これが、写真検出アルゴリズムの最初の試作につながりました。課題は明白に思えました。複数の写真を含むスキャン画像から、どのピクセルが写真に属し、どのピクセルがスキャナーの台に属するかを判定して、写真を見つけるのです。写真はすべて長方形で、(たいていは)角がはっきりしています。写真の角の周辺では、隣接するピクセルの25%が写真に属し、75%が背景に属します。背景はたいていほぼ白で、写真の内容は一般に白とは大きく異なります。
この考え方に沿ってピクセルのまとまりを評価すると、たいていの場合、角を見つけられます。誤検出(実際には角ではないもの)もあれば、未検出(見つからない角)もあります。検出された角の周囲のどの領域が背景らしく、どの領域が写真の一部らしいかによって、左上、右上、左下、右下の角に簡単に分類できます。
写真の位置をかなり正確に特定するには、2つか3つの角があれば十分なことがあります。この方法は私の写真セットではかなりうまく機能しました。検出できない角が原因で複数の写真が誤って結合されるなどの問題はありましたが、それでもスキャナーに付属していた標準ソフトよりずっと優れていました。
補足ですが、画像から長方形を見つける方法としては、エッジ検出も有効です。私のアルゴリズムで一度も使われなかったとは言えませんが、写真の検出結果を評価するための補助として使っただけです。主役になったことはありません。
2019年 – 四角形とブロック…そして角

2019年の秋、何年も自動検出アルゴリズムの改善を繰り返し試みてきたにもかかわらず、進歩はほとんどありませんでした。角の検出方法を細かく調整して多少改善できましたが、画期的なものではありませんでした。白い背景でスキャンしない場合でも動作するよう、角検出アルゴリズムに複数のフィルター層を追加しました。これはかなり役立ちましたが、十分ではありませんでした。
次の大きな進展は「四角形方式」でした。IT用語では、連結成分のラベリングと凸包フィッティングと呼ばれます。考え方はとてもシンプルです。さまざまなフィルターを使って入力画像の全ピクセルを背景か写真に分類し、写真の一部に見えるピクセルのまとまりを探します。隣接する四角形をグループ化し、それぞれのグループが検出された写真のおおよその輪郭になります。
この方法は、背景が不均一な場合にかなりうまく機能しました。角検出アルゴリズムを大幅に厳格化し、明らかな写真だけを検出するようにしました。その後、四角形方式で、残った未検出の領域を処理してほかの写真を探しました。残念ながら、写真の回転角を正確に検出する方法は分からず、写真は常に回転なし(0度)で検出されました。それでも、角だけに頼る方法と比べれば大きな改善でした。
2026年夏 – 四角形がついに回転する
自動検出方法をさらに改善しようと何度も失敗した後、ようやく検出された四角形のグループの回転角を特定できるようになりました。これをきっかけに四角形検出をやめることにしました。多くの誤検出や検出結果の結合の原因になっていたためです。しかし、またしても結果をそれ以上改善することはできませんでした。
2026年初秋 – ディープラーニング
ほかに進む道はありませんでした。四角形と角では、これ以上良い結果を出せません。アルゴリズムをどれほど調整しても、避けられない事実が残りました。画像から長方形の物体を見つけるのは簡単です。どのピクセルが写真に属するかを判断するのは難しい――とても難しいのです。すべては各ピクセルの単純な二値分類にかかっています。どのピクセルが長方形に属するかを正確に特定できないなら、長方形検出方法をどれだけ調整しても意味がありませんよね?
ディープラーニングでは、人間の脳をある程度まねるアルゴリズムであるニューラルネットワークを使います。ニューラルネットワークの学習には、ネットワークを訓練・評価するための大量のサンプルデータ(および対応する正解)が必要です。スキャン画像向けの写真検出システムを学習させるのは簡単ではありません。インターネットでスキャン写真をトラック一台分も見つけることはできません。顧客から入手することもできませんでした。ソフトウェアがスキャン画像をアップロードすることは一切なく、顧客もそのような処理を承認するはずがないからです。
ディープラーニングは、非常に重要な問いへの答えをもたらします。このピクセルは写真の一部なのか、それとも違うのか?この問いに確実に答えられれば、シンプルな連結成分ラベリングアルゴリズム(私が「四角形」と呼んでいるもの)で写真を非常に確実に検出できます。
誰のプライバシーも損なうことなく、ニューラルネットワークの学習に十分なサンプルデータを集める方法を見つけました。その結果、AutoSplitterはv1.16.1以降、写真を非常に確実に検出できるようになりました。
今後
今のところ、次に何があるのかは分かりません。自動検出をさらに改善するには、トレーニングデータを調整する必要がありそうです。結果はまだ100%正確ではありませんし、おそらく今後もそうなることはないでしょう。いずれにしても、改善する方法が見つかれば試してみます。