答えて
希望これは私が最初に画像処理上のいくつかの良いと基本的な本を読むことをお勧めしたいと思いますthis question.
の続きです。私はこの本をお勧めします:Digital image processing using MATLAB by Gonzalez。
1)R、G、B面に画像を変換する:とにかく、あなたの質問について
。
Image_red = Image_rgb(:,1);
Image_green = Image_rgb(:,2);
Image_blue = Image_rgb(:,3);
2)必要な領域)があなたの質問に画像の通りの(赤色の高い含有量を有しているので、適切な値をR面としきい値を取ります。
BW = im2bw(Image_red, threshold value)
3)バーコード領域が1色(白色と仮定する)であり、他の部分が異なる色(黒色)である2値画像が得られます。
4)この白い領域の位置を最小境界矩形として取得します。
STATS = regionprops(BW, 'BoundingBox')
この矩形の位置を取得したら、好きなことをしてください。例えば、作物、バーコード認識のためのimcropコマンドを使用して、元の画像から、この長方形のバーコードを隔離する:
barcode = imcrop(original_image, rect)
を(私はコードが完全ではありません知っている私は、ので、私が使用するコマンドの唯一のヒントを与えました。 matlabに慣れておらず、画像処理にopencvを使用していますが、確かに簡単な作業でコードを完成させることができます。
EDIT:
iは導出式を実装し、ローパスフィルタリングを適用した後、私が得た画像がグレースケールです。私はちょうどしきい値を適用して、高照度(バーコード領域を含む)の領域だけを取得し、他のすべての部分を遮光するようにしました。簡単なノイズや小さな誤検出を除去するために何らかの侵食を適用してください。補償のために膨張を適用する。今では、最大面積(おそらく、バーコード)で輪郭を見つけることができます。可能な限り小さな四角形を取得します。あなたのバーコードです。 (私はOpenCV Pythonで実装しましたが、Matlabでそれを行う方法はわかりません)。以下にいくつかのテスト結果です:
以下
は、OpenCVのコードです:
#### Code for BARCODE detection ######
import cv,sys
imgco = cv.LoadImage('image.jpg')
img = cv.CreateImage(cv.GetSize(imgco),8,1)
imgx = cv.CreateImage(cv.GetSize(img),cv.IPL_DEPTH_16S,1)
imgy = cv.CreateImage(cv.GetSize(img),cv.IPL_DEPTH_16S,1)
thresh = cv.CreateImage(cv.GetSize(img),8,1)
### Convert image to grayscale ###
cv.CvtColor(imgco,img,cv.CV_BGR2GRAY)
### Finding horizontal and vertical gradient ###
cv.Sobel(img,imgx,1,0,3)
cv.Abs(imgx,imgx)
cv.Sobel(img,imgy,0,1,3)
cv.Abs(imgy,imgy)
cv.Sub(imgx,imgy,imgx)
cv.ConvertScale(imgx,img)
### Low pass filtering ###
cv.Smooth(img,img,cv.CV_GAUSSIAN,7,7,0)
### Applying Threshold ###
cv.Threshold(img,thresh,100,255,cv.CV_THRESH_BINARY)
cv.Erode(thresh,thresh,None,2)
cv.Dilate(thresh,thresh,None,5)
### Contour finding with max. area ###
storage = cv.CreateMemStorage(0)
contour = cv.FindContours(thresh, storage, cv.CV_RETR_CCOMP, cv.CV_CHAIN_APPROX_SIMPLE)
area = 0
while contour:
max_area = cv.ContourArea(contour)
if max_area>area:
area = max_area
bar = list(contour)
contour=contour.h_next()
### Draw bounding rectangles ###
bound_rect = cv.BoundingRect(bar)
pt1 = (bound_rect[0], bound_rect[1])
pt2 = (bound_rect[0] + bound_rect[2], bound_rect[1] + bound_rect[3])
cv.Rectangle(imgco, pt1, pt2, cv.CV_RGB(0,255,255), 2)
cv.ShowImage('img',imgco)
cv.WaitKey(0)
このコードを試してみてください。コードを理解したら、matlabに変換してみてください。あなたは見ることができますOpenCV documentation here.
- 1. MATLABを使用してイメージ内のバブル領域を取得する方法は?
- 2. イメージの領域を見つける
- 3. MATLABを使用して円内に含まれる任意の形状の領域を見つける方法
- 4. MATLABで2つの図形の間の領域を見つける方法は?
- 5. 私はMathWorks社のMATLABを使用して2枚の画像の重複領域を見つけたいMATLAB
- 6. 私は閉じて、MATLABで画像内の領域を指す見つけようとしているMatlabの
- 7. krb5 APIを使用して領域のKDCを見つける
- 8. 数字の位置を見つけて使用する方法
- 9. フラット領域のmatlabのピークを見つける
- 10. Matlab:バイナリ領域の長軸を見つける
- 11. 階層内のデータアイテムの位置を見つける方法は?
- 12. イメージテンプレートの記憶領域を見つける方法は?
- 13. XPathを使用して要素の位置を見つける方法は?
- 14. 位置を使用して画像領域内のテキストを含む:相対;
- 15. VS2015のコマンドバーオーバーフロー領域の位置を変更する方法は?
- 16. 変数の特定の領域を見つける方法AS3
- 17. オーバーラップ領域を見つけるためのインターバルツリーの使用
- 18. 三角の領域を見つける
- 19. 3D MATLAB行列の最大要素の位置を見つける方法は?
- 20. 通知領域の位置を検出する方法は?
- 21. ウィンドウ内の絶対NSViewフレーム位置を見つける方法
- 22. lower_bound(upper_bound)を使用して配列内の任意の数の位置を見つける方法は?
- 23. 可視領域の位置
- 24. パイゲームを使用して中心の位置を見つける
- 25. 特定の領域内の輪郭を見つける
- 26. jQueryを使用して要素のページ内の位置を見つける方法はありますか?
- 27. jQueryを使用して親/セット内のセレクター位置を見つけるか?
- 28. イメージの領域のようなセクタを、MATLABを使用して領域のような別のセクタにワープする方法はありますか?
- 29. gmaps - 可視領域内の場所を見つける
- 30. delphi firemonkey:イメージ領域をボタンとして使う方法は?
まあ、私は灰色の画像、最初の画像に示されているようなカラー画像ではない勾配の結果を取得します。私はそれがイメージの照明レベルの単なる色表現だと思う。その場合、イメージングの高い領域を分離するのに適した値にイメージのしきい値を設定する必要があります。私はその答えを編集しました。 –
@Kimちょっと好奇心:最初の画像はどのように生成されたのですか? –