Image Processing - How to separate barcode from the background
古いコメントを表示
I'm wondering how to separate the barcode from background itself, and I have tried some different to remove the unwanted object but cannot remove fully , anybody has an idea!
%Read Image
RGB = imread('barcode.jpg');
%Resize Image
RGB = imresize(RGB, 0.33);
%Convert from RGB to Gray
Gray = rgb2gray(RGB);
%Threshold Image to black and white
Threshold = graythresh(Gray);
BW = im2bw(Gray, Threshold);
%Remove Noise
BW2 = bwareaopen(BW,25000);
imshow(BW2)
採用された回答
その他の回答 (2 件)
noosa
2012 年 1 月 25 日
0 投票
I am trying to run this code but I get this error :
??? Error using ==> area at 44 Must supply Y data or X and Y data as first argument(s).
Can you help me please???
10 件のコメント
Chandra Kurniawan
2012 年 1 月 25 日
Please post your code.
noosa
2012 年 1 月 25 日
I am trying to run your code and I get that error linked to area command. How can I solve it please?
Thank you Chandra for your quick response !
Chandra Kurniawan
2012 年 1 月 25 日
Hi, your error message said 'Error using ==> area at 44 Must supply Y data or X and Y data as first argument(s).'
It seem you have named your m-file with 'area.m', right?
However in your script 'area' was a variable.
Please try to rename your script with other name.
noosa
2012 年 1 月 25 日
No I haven't name my file 'area.m', I named it 'barcode'
I got this error message because area is already a default command in matlab, so I renamed it 'v', I got this error:
??? Undefined function or variable 'v'.
Error in ==> barcode at 16
[C I] = min(v);
Then I have thought to check length(stat), I am surprised that it return 0 !
So the loop
for cnt = 1 : length(stat)
v(cnt) = stat(cnt).BoundingBox(3) * stat(cnt).BoundingBox(4);
end
will not work.
Do you know why length(stat) returns 0 ??
Chandra Kurniawan
2012 年 1 月 25 日
Yes, I see the problem.
before line 'stat = regionprops(Iarea,'boundingbox');'
you should do area opening by 'Iarea = bwareaopen(Ibw,25000);', right?
It seem bwareaopen remove all object in your picture.
In other word, all objects in your image have area less than 25000.
That's the reason why length(stat) returns 0.
noosa
2012 年 1 月 25 日
oh I see ! so how to fix the parameter 25000? is there any automatic method?
Chandra Kurniawan
2012 年 1 月 25 日
Yes, just decrease the value.
Eq 24000 or less.
noosa
2012 年 1 月 25 日
But I need to do this with many images, so I can't change the value each time :((( that's why I asked for automated method to determine this threshold !
Chandra Kurniawan
2012 年 1 月 25 日
Just find the largest area and then use that value as threshold
Eq:
I = imread('cameraman.tif');
I = im2bw(I);
stat = regionprops(I,'area');
C(1:length(stat)) = stat(1:end).Area;
m = max(C);
J = bwareaopen(I,m);
imshow(J);
noosa
2012 年 1 月 25 日
thank you ! I will try it :))
mostafa alhamdany
2015 年 12 月 4 日
0 投票
hi this code is not working and the error is : Error using area (line 35) Must supply Y data or X and Y data as first argument(s).
Error in barcode (line 15) [C I] = min(area); can anyone help me to solve it , please
カテゴリ
ヘルプ センター および File Exchange で Image Processing Toolbox についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

