0
それ以上の認識のために文書画像を準備する必要があります。私の国では文書を黒色または灰色のフォントで書かなければならないという厳しい規則があります。署名とスタンプも青色でなければなりません。したがって、現在のステップでは、非グレースケールの色の要素を削除して、スタンプや署名を削除する必要があります。これは、文書のフラグメントの例です: 私は別にグレースケールにグレースケールコンポーネントおよび非グレースケールコンポーネントを変換するためのコードを書かれている: :文書画像から非濃い色の成分を取り除く
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
from skimage import io
from skimage.color import rgba2rgb, rgb2grey, colorconv
import matplotlib.pyplot as plt
def separate_color_regions(im):
if im.shape[-1]==4:
im=rgba2rgb(im)
#representin each color chanel as float in range [0, 1.]
im=colorconv._prepare_colorarray(im)
#because we wont decompose black color instead of white
im=1.-im
#calculate gray component using the formula: grey=cos_a*|color|*(1, 1, 1)/sqrt(3),
#according to scalar multiplication formula cos_a*|color|=color*(1, 1, 1)/sqrt(3)
#here sqrt(3) added since |(1, 1, 1)|=sqrt(3)
gray=(im[..., 0]+im[..., 1]+im[..., 2])/3
proj=im.copy()
for i in range(3):
proj[..., i]-=gray
def norm(inp):
"""
convert each color vector to its l2 norm
"""
t=inp*inp
return np.sqrt(np.sum(t, -1))
def mask_nan(inp):
where_are_NaNs = np.isnan(inp)
inp[where_are_NaNs] = 0.
return inp
return 1.-mask_nan(norm(proj)/norm(im)), 1.-mask_nan((3.**0.5)*gray/norm(im))
im=io.imread('stamps.png')
fig, (ax1, ax2, ax3) = plt.subplots(nrows=3)
ax1.imshow(im)
ax1.axis('off')
ax1.set_title('Original image')
nongray, gray=separate_color_regions(im)
ax2.imshow(nongray, cmap=plt.cm.gray, aspect='auto', interpolation='none')
ax2.axis('off')
ax2.set_title('Non-grey_components filter')
ax3.imshow(gray, cmap=plt.cm.gray, aspect='auto', interpolation='none')
ax3.axis('off')
ax3.set_title('Grey component filter')
fig.tight_layout()
plt.show()
そして、ここではそれの結果は、パフォーマンスだです非グレースケールのオブジェクトだけを強調表示することができますが、グレースケールのオブジェクトとは区別できず、多くのノイズをイメージに取り込むことができません。私の場合にはよりよい解決策があるかどうかを教えてください。
代わりに、手動でしきい値を設定するには、画像の青チャンネルにしきい値を設定することができます。この場合、あなたの国で利用可能なあらゆる種類の文書に適用されます。手動の方法で行った場合、異なる種類のインクが使用される場合があります。 –