前提・実現したいこと
matlabで「トランプカードの枠線を認識」させようとしています。
方法としてはハフ変換の線分検出を用いて行おうとしています。
発生している問題・エラーメッセージ
添付画像のように「4の♠」ではうまくいくのですが、「Jの♠」は上辺と下辺が検出されず困っています。
「Jの♠」の枠線を認識させるにはどうしたらいいでしょうか。
エラーメッセージ
(エラーはでていません)
該当のソースコード
使用言語:matlab
ソースコード
gray1 = imread('######');
binary1 = imbinarize(gray1);
edge1 = edge(binary1,'Canny');
%%%%%バイナリ画像膨張%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
se90 = strel('line',12,90); se0 = strel('line',12,0); %縦方向、横方向に12ピクセル
edge1 = imdilate(edge1,[se90 se0]);
%%%%%ハフ変換%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[H,T,R] = hough(edge1);
P = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:)))); %ピークの検出
lines = houghlines(edge1,T,R,P,'FillGap',20,'MinLength',500); %線分の検出(長さ500以上)
figure, imshow(edge1), hold on
for k = 1:length(lines)
xyAtoZ = [lines(k).point1; lines(k).point2]; % xyAtoZ(2,1)は終点のx座標、xyAtoZ(1,2)は始点のy座標
plot(xyAtoZ(:,1),xyAtoZ(:,2),'LineWidth',2,'Color','green');
plot(xyAtoZ(1,1),xyAtoZ(1,2),'o','LineWidth',2,'Color','yellow');
plot(xyAtoZ(2,1),xyAtoZ(2,2),'x','LineWidth',2,'Color','red');
end
試したこと
houghpeaksの特定するピーク数の変更(numpeaks)
houghlinesの間隔GapとMinLengthの変更
補足情報(FW/ツールのバージョンなど)
回答2件
あなたの回答
tips
プレビュー