ค้นหาการเปลี่ยนแปลงที่สำคัญในรายการใน Python

ฉันก็เลยมีโค้ดเล็กๆ น้อยๆ นี้

for x in range(x1,x2):
        for y in range(y1, y2):
            cpixel = pixels[x, y]
            if bw:
                bw_value = int(round(sum(cpixel) / float(len(cpixel))))
                all_pixels.append(bw_value)
                title = "Averaged (B&W) Pixel Values"
            else:
                if lumi:
                    luma = (0.3 * cpixel[0]) + (0.59 * cpixel[1]) + (0.11 * cpixel[2])
                    all_pixels.append(luma)
                    title = "Pixel Luminosity Values"
                else:
                    if round(sum(cpixel)) / float(len(cpixel)) > 100:
                        all_pixels.append(255)
                    else:
                        all_pixels.append(0)
                    title = "Pixel Binary Transform Values"

นำมาและแก้ไขเล็กน้อยจากที่นี่ รับรายการค่าพิกเซลจาก PIL เพื่อแสดงรายการค่าพิกเซล (all_pixels) ภายในขอบเขตขอบเขต (ผู้ใช้เลือก)

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

สิ่งที่ฉันสนใจคือการติดตามขอบเขตระหว่างสองสิ่งนี้ ฉันต้องการตรวจสอบว่าขอบเขตนี้อยู่ที่ไหน และมันเลื่อนไปทางซ้ายหรือขวา ฉันไม่สามารถคิดวิธีอื่นใดได้นอกจากต้องตรวจสอบแต่ละค่าเนื่องจากค่านั้นต่อท้าย all_pixels แล้วจึงติดตามกลับพิกัด

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

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


person DamianJ    schedule 14.06.2012    source แหล่งที่มา
comment
คุณหมายถึงอะไรกับ 'การเปลี่ยนแปลงที่สำคัญ'? และมีไว้เพื่ออะไร? ดูเหมือนว่าคุณต้องการติดตามการเคลื่อนไหวบางอย่าง   -  person Junuxx    schedule 14.06.2012
comment
โดยพื้นฐานแล้ว ฉันมีผงอยู่ในกระบอกสูบ และฉันต้องการติดตามปริมาตรในขณะที่มันอัดแน่นหลังจากถูกต๊าป ขอบเขตที่ฉันพูดถึงคือเส้นด้านบนของแป้งที่เกิดจากเงาของมัน นัยสำคัญมากจะเป็นค่าใดๆ ที่มากกว่ามูลค่าที่เกิดจากบริเวณเงา โดยพื้นฐานแล้ว ฉันจะถ่ายภาพหลังจากการแตะแต่ละครั้ง และนั่นคือวิธีที่ฉันพยายามติดตามการเปลี่ยนแปลง   -  person DamianJ    schedule 14.06.2012


คำตอบ (2)


จากคำอธิบายปัญหาในความคิดเห็นของคุณ ฉันคิดว่าเครื่องตรวจจับขอบแบบธรรมดาอาจเพียงพอแล้ว แม้ว่าจะขึ้นอยู่กับสิ่งต่างๆ เช่น มุมกล้อง คอนทราสต์ แสง ฯลฯ

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

คุณสามารถเขียนโค้ดได้ด้วยตัวเอง หรือใช้ OpenCV แต่ฉันคิดว่างานนี้อาจเกินกำลังไปเล็กน้อย Numpy ก็เป็นตัวเลือกที่ดีเช่นกัน

person Junuxx    schedule 14.06.2012
comment
ขอบคุณสำหรับข้อเสนอแนะ ฉันจะดูว่าฉันกำลังทำอะไรอยู่ - person DamianJ; 14.06.2012

จากคำอธิบายของคุณ ดูเหมือนว่าคุณควรจะใช้ไลบรารี่คอมพิวเตอร์วิทัศน์จริงๆ แทนที่จะพยายามเขียนโค้ดการตรวจจับรูปภาพของคุณเอง

นี่คือการสนทนาเกี่ยวกับคอมพิวเตอร์วิทัศน์ใน Python: ห้องสมุดคอมพิวเตอร์วิทัศน์ที่ดีสำหรับ Python ที่จะอนุญาตให้ฉันค้นหาใบหน้าในวิดีโอ Flash/HTML5 คืออะไร

ดูเหมือนว่า OpenCV จะเป็นทางออกที่ดีที่สุด

http://opencv.willowgarage.com/

person steveha    schedule 14.06.2012