Scan Image, LUT - gonft/OpenCVApple GitHub Wiki

μ–΄λ–»κ²Œ OpenCV둜 이미지, LUT(Look Up Table) 및 μ‹œκ°„μΈ‘μ •μ„ μŠ€μΊ” ν• κΉŒμš”?

λͺ©ν‘œ

μš°λ¦¬λŠ” λ‹€μŒ μ§ˆλ¬Έμ— λŒ€ν•œ 해닡을 찾을 것 μž…λ‹ˆλ‹€.

  • μ–΄λ–»κ²Œ μ΄λ―Έμ§€λ‘œλΆ€ν„° λͺ¨λ“  픽셀을 μ‚΄νŽ΄λ³Όμˆ˜ μžˆμ„κΉŒμš”?
  • μ–΄λ–»κ²Œ OpenCV ν–‰λ ¬ 값을 μ €μž₯ν• κΉŒμš”?
  • μ–΄λ–»κ²Œ μ•Œκ³ λ¦¬μ¦˜ μ„±λŠ₯을 μΈ‘μ •ν• κΉŒμš”?
  • LUT(Look Up Table)μ΄λž€ 무엇이며 μ™œ LUTλ₯Ό μ‚¬μš©ν• κΉŒμš”?

ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€

κ°„λ‹¨ν•œ 색상 κ°μ†Œ 방법을 κ³ λ €ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. ν–‰λ ¬ μ•„μ΄ν…œ μ €μž₯을 μœ„ν•΄ Cλ‚˜ C++ unsigned charνƒ€μž…μ„ μ‚¬μš©ν•˜λ©΄ ν”½μ…€ 체널에 μ΅œλŒ€ 256개의 μ„œλ‘œλ‹€λ₯Έ 값이 μžˆμ„μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. 3채널 μ΄λ―Έμ§€μ˜ 경우 λ„ˆλ¬΄ λ§Žμ€ 색상(μ •ν™•νžˆλŠ” 1600만)을 ν˜•μ„± ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ„ˆλ¬΄ λ§Žμ€ μƒ‰μ‘°λ‘œ μž‘μ—…ν•˜λ©΄ μ•Œκ³ λ¦¬μ¦˜ μ„±λŠ₯에 큰 μ €ν•˜λ₯Ό 쀄 수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ•Œλ‘œλŠ” λ™μΌν•œ κ²°κ³Όλ₯Ό 얻기에 훨씬 적게 μž‘μ—…ν•˜λŠ” κ²ƒμœΌλ‘œλ„ μΆ©λΆ„ν•©λ‹ˆλ‹€.

이 경우 색상 곡간을 μ€„μ΄λŠ” 것이 μΌλ°˜μ μž…λ‹ˆλ‹€. μ΄λŠ” 색상 κ³΅κ°„μ˜ ν˜„μž¬ 값을 μƒˆλ‘œμš΄ μž…λ ₯ κ°’μœΌλ‘œ λ‚˜λˆ„μ–΄ 더 적은 μƒ‰μƒμœΌλ‘œ 끝남을 μ˜λ―Έν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 0μ—μ„œ 9μ‚¬μ΄μ˜ λͺ¨λ“  값은 μƒˆ κ°’0을 μ·¨ν•˜κ³  10μ—μ„œ 19μ‚¬μ΄μ˜ λͺ¨λ“  값은 10을 μ·¨ν•©λ‹ˆλ‹€.

uchar(unsigned char: 0~255μ‚¬μ΄μ˜ λ‹€λ₯Έ κ°’) 값을 intκ°’μœΌλ‘œ λ‚˜λˆŒ λ•Œ 결과도 charμž…λ‹ˆλ‹€. 이 값은 char값일 수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λͺ¨λ“  μ†Œμˆ˜λŠ” λ‚΄λ¦Όλ©λ‹ˆλ‹€. 이 사싀을 μ΄μš©ν•˜μ—¬ uchar μ •μ˜μ—­μ˜ μƒμœ„ 연산은 λ‹€μŒκ³Ό 같이 ν‘œν˜„ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

part

κ°„λ‹¨ν•œ 색상 곡간 κ°μ†Œ μ•Œκ³ λ¦¬μ¦˜μ€ κ·Έμ € 이미지 ν–‰λ ¬μ˜ λͺ¨λ“  픽셀에 거쳐 이 μˆ˜μ‹μ„ μ μš©ν•˜λŠ” κ²ƒμœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€. μš°λ¦¬κ°€ λ‚˜λˆ„κΈ°μ™€ κ³±μ…ˆ 연산을 ν•œλ‹€λŠ” 것은 μ£Όλͺ©ν•  κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ μž‘μ—…μ€ μ‹œμŠ€ν…œ λΉ„μš©μ΄ 많이 λ“­λ‹ˆλ‹€. κ°€λŠ₯ν•˜λ‹€λ©΄ λͺ‡ 가지 λΊ„μ…ˆ, λ”ν•˜κΈ° λ˜λŠ” μ΅œμ„ μ˜ 경우 κ°„λ‹¨ν•œ ν• λ‹Ήκ³Ό 같은 더 μ €λ ΄ν•œ 연산을 μ‚¬μš©ν•˜μ—¬ ν”Όν•  κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, μƒμœ„ 연산에 λŒ€ν•œ μž…λ ₯ κ°’μ˜ μˆ˜λŠ” μ œν•œλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. uchar μ‹œμŠ€ν…œμ˜ 경우 이것은 μ •ν™•νžˆ 256μž…λ‹ˆλ‹€.

λ”°λΌμ„œ 큰 μ΄λ―Έμ§€μ˜ 경우 사전에 κ°€λŠ₯ν•œ λͺ¨λ“  값을 κ³„μ‚°ν•˜κ³  ν• λ‹Ή 도쀑 LUT(Look Up Table)을 μ‚¬μš©ν•˜μ—¬ ν• λ‹Ή ν•˜λŠ”κ²ƒμ΄ μ’‹μŠ΅λ‹ˆλ‹€. LUTλŠ” 주어진 μž…λ ₯ κ°’ λ³€ν˜•μ— λŒ€ν•΄ μ΅œμ’… 좜λ ₯ 값을 λ³΄μœ ν•˜λŠ” λ‹¨μˆœ λ°°μ—΄ (ν•˜λ‚˜ μ΄μƒμ˜ 차원 포함)μž…λ‹ˆλ‹€. 강점은 μš°λ¦¬κ°€ 계산을 ν•  ν•„μš”κ°€ μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. μš°λ¦¬λŠ” 단지 결과만 μ½λŠ”κ²ƒμ΄ ν•„μš”ν•  뿐이닀.

우리의 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ ν”„λ‘œκ·Έλž¨(그리고 여기에 μ œμ‹œλœ μƒ˜ν”Œ)은 λ‹€μŒμ„ 따라할 κ²ƒμž…λ‹ˆλ‹€: μ½˜μ†” 라인 이미지 μš”μ†Œ(컬러 λ˜λŠ” 그레이 μŠ€μΌ€μΌ μˆ˜λ„ μžˆλ‹€)λ₯Ό 읽고 주어진 μ½˜μ†” 라인 μ •μˆ˜ μš”μ†Œλ“€μ˜ κ°μ†Œλ₯Ό μ μš©ν•œλ‹€. OpenCVμ—μ„œλŠ” ν˜„μž¬ ν”½μ…€ λ‹¨μœ„λ‘œ 이미지λ₯Ό ν†΅κ³Όν•˜λŠ” μ„Έ 가지 μ£Όμš” 방법이 μžˆμŠ΅λ‹ˆλ‹€. μ‘°κΈˆλ” 재미있게 λ§Œλ“€κΈ° μœ„ν•΄ λͺ¨λ“  방법을 μ‚¬μš©ν•˜μ—¬ 각 이미지λ₯Ό μŠ€μΊ”ν•˜κ³  μ‚¬μš©λœ μ‹œκ°„μ„ 좜λ ₯ν•˜μ‹­μ‹œμ˜€.

μ—¬κΈ°μ—μ„œ 전체 μ†ŒμŠ€ μ½”λ“œλ₯Ό λ‹€μš΄λ‘œλ“œν•˜κ±°λ‚˜ OpenCV의 μ‹¬ν”Œ λ””λ ‰ν† λ¦¬μ—μ„œ μ½”μ–΄ μ„Ήμ…˜μ— λŒ€ν•œ C++μžμŠ΅μ„œ μ½”λ“œλ₯Ό μ°Ύμ•„ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

μ½”λ“œμ—λŒ€ν•œ μƒμ„Έν•œ μ„€λͺ…은 μ—¬κΈ°λ₯Ό μ°Έκ³ ν•˜μ„Έμš” 😈

how_to_scan_images imageName.jpg intValueToReduce [G]