耳部分のタグ(耳標)だけを取り出し、その後文字認識を行いたい
Show older comments
現在以下のようなプログラムを作成しています。
うまく耳部分のタグ(耳標)だけを取り出したいです。
その後は文字認識として光学式文字認識などを用いる予定です。
アドバイス宜しくお願いします。
I = imread('\耳標写真\牛舎.png');
HSV = rgb2hsv(I);
Hue = HSV(:,:,1);
figure,
%subplot(2,2,1);imshow(Hue,"InitialMagnification","fit");
%impixelinfo
Th1 =0.13; Th2 =0.15;
BW = (Th1<=Hue&Hue<=Th2);
subplot(2,2,2),imshow(BW,"InitialMagnification","fit");

1 Comment
Kojiro Saito
on 9 Jan 2023
HSV色空間の下限Th1と上限Th2を使ってBWを抽出していますが、これは耳標の抽出をおこなっている計算でしょうか?
Answers (1)
Kojiro Saito
on 11 Jan 2023
>その後、文字認識に移りたいのですが耳標部分の画像を拡大したいです。
耳標部分の画像を拡大するには、画像から耳標の周りを切り抜きをしてリサイズする必要があります。
bwareafiltとregionprops (どちらもImage Processing Toolboxの関数)を使って対象領域を切り抜きし、imresizeでリサイズできます。文字認識はocr関数 (Computer Vision Toolbox)でできます。
for文の中に以下を追加してみてください。
bwMask = bwareafilt(I_5(:, :, 1), 1);
props = regionprops(bwMask, 'BoundingBox');
imgNew = imcrop(I_7, props.BoundingBox);
imgNewRes = imresize(imgNew, 5); % 画像サイズを5倍にする
ocrResults = ocr(imgNewRes, 'TextLayout', 'block'); % 自動レイアウト解析を無効にしてテキストブロックを検出
disp(ocrResults)
4 Comments
Kojiro Saito
on 12 Jan 2023
スクリーンショットを確認しました。変数sがdouble型になっていて、そのためにI_5がdouble型になっているのが原因ですね。
質問のコメントにはfor文の最初に
s=(L==m);
があり、ここでsがlogical型になり、I_5もlogical型でbwareafiltが使えるようになります。
このコードを復元してみてください。
Kojiro Saito
on 12 Jan 2023
imshowで1箇所しか表示されないのは文字認識がそこしかできていないようです。
Kojiro Saito
on 13 Jan 2023
OCRを引き続き使って検知の精度を上げる方法としては、OCRトレーナーを使ってカスタムフォントを学習させる方法があります。1枚ではなく何枚か画像を使って学習させたほうが良いです。
他の方法では、HOG特徴量を抽出してから、サポートベクターマシンやニューラルネットワーク(シャローネットワークまたはディープネットワーク)に掛ける方法もあります。こちらの例が参考になると思います。
Kojiro Saito
on 19 Jan 2023
CNNを使うということは分かりましたが、上記のコードで何が困っているところでしょうか?提出まで時間がないとは思いますが、聞きたいところを的確にしないと他の方も回答しづらいと思います。
「宿題・研究課題などの丸投げはご勘弁くださいませ。
また、問題点・状況をできるだけ明確することで的確な回答に繋がるかと思います。」
Categories
Find more on 光学式文字認識 (OCR) in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!