ค้นหาปากใบในรูปพืชกล้องจุลทรรศน์


26

นี่คือคำถามสำหรับผู้เชี่ยวชาญด้านการประมวลผลภาพ

ฉันกำลังทำงานกับปัญหาการมองเห็นคอมพิวเตอร์ที่ยากลำบาก งานคือการนับปากใบ (ทำเครื่องหมายด้านล่าง) ในภาพกล้องจุลทรรศน์ DIC ภาพเหล่านี้มีความทนทานต่อเทคนิคการประมวลผลภาพผิวเผินมากที่สุดเช่นการดำเนินงานทางสัณฐานวิทยาและการตรวจจับขอบ นอกจากนี้ยังแตกต่างจากงานนับเซลล์อื่น ๆ

ฉันใช้ OpenCV แผนของฉันคือการตรวจสอบคุณสมบัติที่มีประโยชน์สำหรับการเลือกปฏิบัติปากใบ

  • ตัวแยกประเภทของพื้นผิว
    • DCT (การแปลงโคไซน์ไม่ต่อเนื่อง / การวิเคราะห์โดเมนความถี่)
    • LBP (รูปแบบไบนารีโลคัล)
  • HOG (ฮิสโตแกรมของการไล่ระดับสีเชิง)
  • เครื่องตรวจจับคุณสมบัติที่ทนทาน (ฉันไม่เชื่อ)
    • มุมแฮร์ริส
    • SIFT, SURF, STAR, เป็นต้น
  • ตัวเรียงลำดับ Haar cascade / คุณสมบัติของ Viola-Jones

และอาจออกแบบตัวอธิบายคุณลักษณะใหม่ ตอนนี้ฉันไม่ได้เลือกตัวจําแนก

ฉันพลาดอะไรไป คุณจะแก้ปัญหานี้อย่างไร การแก้ปัญหาการตรวจจับวัตถุที่คล้ายกันจะมีประโยชน์มาก

ภาพตัวอย่างที่นี่

ปากใบ

หลังจากตัวกรอง bandpass: กรอง bandpass

การตรวจจับขอบ Canny ไม่ได้เป็นสัญญา บางพื้นที่ภาพไม่ได้โฟกัส: การตรวจจับขอบแสนรู้


1
อาจจะแทนที่จะพยายามค้นหาปากใบคุณสามารถลองลบบรรทัด mazy?
endolith

1
คุณต้องประมวลผลภาพกี่ภาพ? จะต้องรวดเร็วขนาดไหน? มันต้องเป็นไปโดยอัตโนมัติอย่างไร?
endolith

1
ไม่จำเป็นต้องเร็วมาก เรากำลังประมวลผลตามคำสั่งของ 1,000 ภาพ ควรเป็นไปโดยอัตโนมัติ - ถ่ายโอนข้อมูลภาพไปยังไดเรกทอรีและไป
แมตต์เอ็ม

คำตอบ:


15

ขออภัยฉันไม่รู้ OpenCV และนี่เป็นขั้นตอนการประมวลผลล่วงหน้ามากกว่าคำตอบทั้งหมด:

ก่อนอื่นคุณไม่ต้องการเครื่องมือตรวจจับขอบ ตัวตรวจจับขอบแปลงการเปลี่ยนแปลง (เช่นมืดไปหาแสง):

    _____ / ~~~~~

เป็นสันเขา (เส้นสว่างในที่มืด) เช่นนี้

    ____ / _____

มันทำให้เกิดความแตกต่างในคำอื่น ๆ

แต่ในภาพของคุณมีแสงส่องลงมาจากทิศทางเดียวซึ่งแสดงให้เราเห็นถึงการบรรเทาของพื้นผิว 3 มิติ เรารับรู้สิ่งนี้เป็นเส้นและขอบเนื่องจากเราเคยเห็นสิ่งต่าง ๆ ในแบบ 3 มิติ แต่ไม่จริงซึ่งเป็นสาเหตุที่เครื่องตรวจจับขอบไม่ทำงานและการจับคู่แม่แบบไม่สามารถทำงานได้อย่างง่ายดายด้วยรูปภาพที่หมุน การจับคู่ที่การหมุน 0 องศาจะยกเลิกอย่างสมบูรณ์ที่ 180 องศาเพราะแสงและความมืดจะสอดคล้องกัน)

หากความสูงของเส้น mazy เส้นใดเส้นหนึ่งจากด้านข้าง:

    ____ / _____

ฟังก์ชั่นความสว่างเมื่อส่องสว่างจากด้านหนึ่งจะมีลักษณะดังนี้:

    ____ ____ ∧v

นี่คือสิ่งที่คุณเห็นในภาพของคุณ ผิวหน้าจะสว่างขึ้นและผิวหน้าจะเข้มขึ้น ดังนั้นคุณไม่ต้องการแยกความแตกต่าง คุณต้องรวมภาพตามทิศทางของการส่องสว่างและมันจะให้แผนที่ความสูงดั้งเดิมของพื้นผิว (โดยประมาณ) จากนั้นจะเป็นการง่ายกว่าที่จะจับคู่สิ่งต่าง ๆ ไม่ว่าจะผ่านการแปลง Hough หรือการจับคู่แม่แบบหรืออะไรก็ตาม

ฉันไม่แน่ใจว่าจะหาทิศทางของการส่องสว่างอัตโนมัติได้อย่างไร ถ้ามันเหมือนกันสำหรับภาพทั้งหมดของคุณ ไม่เช่นนั้นคุณจะต้องหาเส้นตัดกันที่ใหญ่ที่สุดและสมมติว่าแสงนั้นตั้งฉากกับมันหรือบางสิ่ง สำหรับตัวอย่างของฉันฉันหมุนรูปภาพด้วยตนเองเป็นสิ่งที่ฉันคิดว่าเป็นทิศทางที่ถูกต้องด้วยแสงที่มาจากด้านซ้าย:

ต้นฉบับหมุน

คุณต้องลบการเปลี่ยนแปลงความถี่ต่ำทั้งหมดในภาพเพื่อเน้นเฉพาะคุณลักษณะที่มีลักษณะคล้ายเส้นที่เปลี่ยนแปลงอย่างรวดเร็ว เพื่อหลีกเลี่ยงการเรียกสิ่งประดิษฐ์ฉันใช้เบลอ 2D แบบเกาส์เซียนแล้วลบออกจากต้นฉบับ:

กรองผ่านสูง

การรวม (ผลรวมสะสม) สามารถหลบหนีได้ง่ายซึ่งก่อให้เกิดเส้นแนวนอน ฉันลบสิ่งเหล่านี้ด้วย high-pass Gaussian อื่น แต่เฉพาะในทิศทางแนวนอนในเวลานี้:

เอาท์พุต

ตอนนี้ปากใบเป็นวงรีสีขาวไปรอบ ๆ แทนที่จะเป็นสีขาวในบางสถานที่และสีดำในที่อื่น ๆ

เดิม:

ป้อนคำอธิบายรูปภาพที่นี่

แบบบูรณาการ:

ป้อนคำอธิบายรูปภาพที่นี่

from pylab import *
import Image
from scipy.ndimage import gaussian_filter, gaussian_filter1d

filename = 'rotated_sample.jpg'
I = Image.open(filename).convert('L')
I = asarray(I)

# Remove DC offset
I = I - average(I)

close('all')
figure()
imshow(I)
gray()
show()
title('Original')

# Remove slowly-varying features
sigma_2d = 2
I = I - gaussian_filter(I, sigma_2d)

figure()
imshow(I)
title('2D filtered with %s' % sigma_2d)

# Integrate
summed = cumsum(I, 1)

# Remove slowly-changing streaks in horizontal direction
sigma_1d = 5
output = summed - gaussian_filter1d(summed, sigma_1d, axis=1)

figure()
imshow(output)
title('1D filtered with %s' % sigma_1d)

การแปลง Houghสามารถใช้ในการตรวจจับจุดไข่ปลาสันนี้ทำจาก "edge pixels" แม้ว่ามันจะมีราคาแพงมากในการคำนวณและหน่วยความจำและพวกมันก็ไม่ได้เป็นจุดไข่ปลาที่สมบูรณ์แบบ ฉันไม่เคยทำมาก่อน แต่มีผลการค้นหาจำนวนมากของ Google สำหรับ " การตรวจจับวงรี hough " ฉันจะบอกว่าถ้าคุณตรวจจับวงรีหนึ่งวงในอีกอันหนึ่งภายในช่องว่างการค้นหาที่มีขนาดมันควรนับเป็นปาก

ดูเพิ่มเติมที่:


ป.ล. สิ่งที่ฉันทำที่นี่มีชื่อหรือไม่? เป็นประเภทตัวกรองทั่วไปหรือไม่
endolith

1
+1 - คำตอบยอดเยี่ยม! เกี่ยวกับระบบอัตโนมัติของมุมแหล่งกำเนิดแสง - คุณสามารถใช้ตัวตรวจจับขอบที่คำนวณทั้งขนาดและการไล่ระดับสีจากนั้นคำนวณค่าเฉลี่ยถ่วงน้ำหนักของการไล่ระดับสี คำตอบที่แข็งแกร่งที่สุดควรอยู่ในทิศทางของการให้แสงสว่าง
Andrey Rubshtein

11

สิ่งแรกที่ฉันจะลองคือจับคู่แม่แบบกับแม่แบบหมุนสำหรับมุมทั้งหมดด้วยขั้นตอน เทมเพลตหมุนได้ที่นี่ การเลือกเทมเพลตอาจไม่สำคัญ - อาจมีหลายแบบที่มีแสงแตกต่างกันและอาจเบลอเพื่อให้มีความแตกต่างของรูปร่าง

http://en.wikipedia.org/wiki/Template_matching#Template-based_matching_and_convolution

ถัดไป - HOG ดูมีแนวโน้มที่นี่ วิธีแก้ปัญหาอื่นอาจใช้ตัวตรวจจับมุมที่แข็งแรงเช่น Moravec หรือ Shi-Tomasi (ที่มีการปราบปรามที่ไม่มากที่สุด) และมองหากลุ่มมุม 2 มุมหรือ 3-4 มุมในบรรทัดเดียวกันกับผู้สมัคร หลังจากหาผู้สมัครคุณสามารถใช้ contour ที่ใช้งานอยู่สำหรับการตรวจสอบ (ไม่แน่ใจว่ามันจะช่วยจริงๆ แต่นั่นเป็นไปได้)

http://en.wikipedia.org/wiki/Corner_detector

http://en.wikipedia.org/wiki/Active_contour

ความเป็นไปได้อีกอย่างหนึ่งคือการใช้ Hough transform สำหรับวงรีอาจมี 2 ไม่ใช่ แต่ฟรีพารามิเตอร์ 3-4


7

คำตอบบางส่วน การหาผู้สมัครที่มี Mathematica:

p = ColorConvert[Import@"http://i.stack.imgur.com/38Ysw.jpg", 
    "GrayScale"] // ImageAdjust;
m = DeleteSmallComponents[Erosion[Dilation[DeleteSmallComponents[
      Binarize[EntropyFilter[p, 1] // ImageAdjust, .97], 10], 3], 5], 100];
ImageMultiply[Dilation[m, 3], p]

ป้อนคำอธิบายรูปภาพที่นี่


ผลที่น่าสนใจ ... อาจจะรวมกับโครงการอื่น ๆ บางอย่าง ...
แมตต์เอ็ม

@MAtt ใช่ฉันคิดว่าถูกทิ้งอย่างน้อย 80% ของพื้นผิวที่ไม่ใช่เป้าหมาย หลังจากขยายหน้ากากเล็กน้อยคุณควรค้นหาจุดไข่ปลาวิธีที่คุณใช้ (ฉันยังคงคิดว่าฉันสามารถทำอะไรได้) มันง่ายกว่ามากตอนนี้คุณรู้แล้วว่าสัตว์ร้ายล้อมรอบ
ดร. เบลิซาเรี

1

ฉันจะเริ่มต้นด้วยการใช้ตัวตรวจจับขอบที่ละเอียดอ่อน (เช่นขนาดการไล่ระดับสีที่มีขีด จำกัด ต่ำ) จากนั้นใช้การแปลง Hough เพื่อพยายามค้นหาจุดไข่ปลา Canny อาจยังทำงานได้เช่นกัน ฉันแน่ใจว่ามีพารามิเตอร์ที่คุณสามารถปรับแต่งเพื่อให้มีความละเอียดอ่อนมากขึ้นและหยิบขอบเบลอ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.