identifying number on dice

5 ビュー (過去 30 日間)
Sameer
Sameer 2014 年 5 月 25 日
コメント済み: Image Analyst 2020 年 10 月 21 日
% I want to crop the front face of dice and identify the number on it. I tried the following
A=imread('dice.png');
figure,imshow(A); title('Original Image');
%Convert the Image to binary
B=im2bw(A);
%Fill the holes
C=imfill(B,'holes');
%Label the connected components
[Label,Total]=bwlabel(C,8);
figure,imshow(C); title('Labelled Image');
% then I did the following
D=imsubtract(B,C);
imshow(D);
%
where Background is black, dice is white with black dots. But WHEN BACKGROUND IS NOT PERFECTLY BLACK THEN IT CREATES PROBLEM. CAN YOU PLZ TELL ME HOW REMOVE BACKGROUND AND CROP ONLY DICE PART?
  2 件のコメント
Aayush Maharjan
Aayush Maharjan 2020 年 10 月 21 日
How can I do the same using python.??? I don't understand Matlab code.
Image Analyst
Image Analyst 2020 年 10 月 21 日
What do you understand? Python? If so, you should know the corresponding functions in Python. I don't know Python's library functions well enough to do the conversion for you. But presumably you know Python much better than MATLAB so you should be able to translate it yourself. If you don't, then try asking in a Python language community forum.

サインインしてコメントする。

採用された回答

Sven
Sven 2014 年 5 月 25 日
編集済み: Sven 2014 年 5 月 25 日
Hi Sameer, Here's what I would do. It's a little like IA's bwareaopen suggestion. It tries to make minimal assumptions other than:
  1. Dice are white and bigger than 1000 pixels
  2. (front facing) dots are surrounded by dice and bigger than 50 pixels
% Fetch the image
I = imread('http://www.mathworks.com/matlabcentral/answers/uploaded_files/13250/dice1.jpg');
G = rgb2gray(I);
% Dice are white and big
diceBlobs = bwareaopen(G>180, 1000);
cc = bwconncomp(diceBlobs);
diceLabels = labelmatrix(cc);
for i = 1:cc.NumObjects
thisDice = diceLabels==i;
% Dots are surrounded by dice and +50 pixels
thisDots = bwareaopen(imfill(thisDice,'holes') & ~thisDice, 50);
dotsCC = bwconncomp(thisDots);
figure, imshow(thisDice*0.5 + thisDots)
title(sprintf('Dice #%d has %d dots',i,dotsCC.NumObjects))
end
Does this code help you out? You could certainly add some further criteria such as dots needing to be round (I would use regionprops and look at, say, the Solidity property), and maybe dice should be square, but this seems reasonably robust as long as your pictures are all quite similar.
Thanks, Sven.
  1 件のコメント
Sameer
Sameer 2014 年 5 月 25 日
Thank you very much

サインインしてコメントする。

その他の回答 (1 件)

Image Analyst
Image Analyst 2014 年 5 月 25 日
You forgot to attach your image(s). It's more difficult to give advice on image processing without an image. Maybe you can do a median filter or maybe call bwareaopen, or do some size filtering. If the black spots in the background are the same size as your spots, you will have to make a mask. Threshold for bright things, fill them in, then take the largest.
  1 件のコメント
Sameer
Sameer 2014 年 5 月 25 日
ooops, I'm sorry. here is the image.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeCall Python from MATLAB についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by