Nums.array के बूलियन मैप में 1s के समूहों की संख्या की गणना करना


16

मैं अभी PIL (Python Image Library) के माध्यम से पायथन में कुछ इमेज प्रोसेसिंग से निपट रहा हूं। मेरा मुख्य उद्देश्य एक immunohistochemistry छवि में रंगीन कोशिकाओं की संख्या की गिनती है। मुझे पता है कि इसके बारे में प्रासंगिक कार्यक्रम, पुस्तकालय, कार्य और ट्यूटोरियल हैं, और मैंने उनमें से लगभग सभी की जाँच की। मेरा प्रमुख उद्देश्य यथासंभव स्क्रैच से कोड को मैन्युअल रूप से लिख रहा है। इसलिए मैं बहुत सारे बाहरी पुस्तकालयों और कार्यों का उपयोग करने से बचने की कोशिश कर रहा हूं। मैंने कार्यक्रम का अधिकांश भाग लिखा है। तो यहाँ कदम से कदम क्या चल रहा है:

कार्यक्रम छवि फ़ाइल में लेता है:उदाहरण

और इसे लाल कोशिकाओं के लिए संसाधित करता है (मूल रूप से, यह लाल रंग के लिए एक निश्चित सीमा से नीचे आरजीबी मूल्यों को बंद कर देता है): यहाँ छवि विवरण दर्ज करें

और इसका बूलियन मानचित्र बनाता है, (इसे बड़ा होने के बाद से इसका एक हिस्सा पेस्ट करें) जो मूल रूप से ऊपर की दूसरी छवि में एक लाल पिक्सेल के साथ जहाँ भी सामना करता है, मूल रूप से सिर्फ 1 डालता है।

22222222222222222222222222222222222222222
20000000111111110000000000000000000000002
20000000111111110000000000000000000000002
20000000111111110000000000000000000000002
20000000011111100000000000000000001100002
20000000001111100000000000000000011111002
20000000000110000000000000000000011111002
20000000000000000000000000000000111111002
20000000000000000000000000000000111111102
20000000000000000000000000000001111111102
20000000000000000000000000000001111111102
20000000000000000000000000000000111111002
20000000000000000000000000000000010000002
20000000000000000000000000000000000000002
22222222222222222222222222222222222222222

मैंने जानबूझकर उस फ्रेम मैप में 1s के समूहों की संख्या की गिनती करने में मेरी मदद करने के लिए 2s के साथ सीमाओं पर जानबूझकर उस फ्रेम को उत्पन्न किया।

आप लोगों से मेरा सवाल यह है कि मैं किस तरह से बूलियन मैप में कोशिकाओं (1s के समूह) की संख्या को कुशलता से गिन सकता हूं? मैंने http://en.wikipedia.org/wiki/Connected-component_labeling पाया है जो बेहद संबंधित और समान दिखते हैं, लेकिन जहाँ तक मैं देखता हूँ, यह पिक्सेल स्तर पर है। मेरा बूलियन स्तर पर है। सिर्फ 1s और 0s।

बहुत बहुत धन्यवाद।


कनेक्टेड घटक लेबलिंग वही है जो आपको चाहिए। मुझे नहीं पता कि आपको क्यों लगता है कि यह अलग है, क्योंकि विकिपीडिया लेख में 1 और 0 के सरणियों से शुरू होने वाले उदाहरण भी हैं।

मुझे पता है कि यह समान (या शायद एक ही) दिखता है, मैं अभी पूरे विकिपीडिया पृष्ठ को पूरी तरह से समझ नहीं सकता क्योंकि अंग्रेजी मेरी मूल भाषा नहीं है। पृष्ठ का "अनुक्रमिक एल्गोरिथ्म" भाग 1s और 0s के साथ काम करने जैसा दिखता है, लेकिन फिर भी मैंने इसके पीछे तर्क नहीं देखा। फ़ॉरेक्स, यह उत्तर, उत्तर-पूर्व, उत्तर-पश्चिम और पश्चिम की जाँच करके क्यों शुरू होता है?

इस समस्या का हल है।

क्या होगा अगर ब्याज की कोशिकाएं अतिव्यापी हैं? क्या आपको विशेष रूप से परिपत्र सुविधाओं की तलाश नहीं करनी चाहिए ताकि आप दो कोशिकाओं को अलग कर सकें जो कि कनेक्टेड दिखती हैं, न कि केवल निरंतर बूँदें ढूंढना?
एंडोलिथ

चीजें बहुत अधिक जटिल हो जाती हैं जब इम्यूनोहिस्टोकेमिस्ट्री चित्र जो आपके पास कोशिकाओं की संख्या, रिज़ॉल्यूशन, पिक्सेल मूल्यों के अधिक विचलन के संदर्भ में खराब गुणवत्ता के होते हैं, इसलिए मैं और किला ... मैं थोड़ा प्रोग्राम लिखने की कोशिश कर रहा हूं जो काम करता है इस तरह के उद्देश्यों के लिए ठीक है, लेकिन यह इनपुट छवि की तरह दिखता है और यह एक आदर्श परिणाम के लिए बहुत महत्वपूर्ण है ..
इब्राहिम सी। कर्ट

जवाबों:


6

ब्रूट फोर्स एप्रोच का कुछ, लेकिन क्षेत्रों को खोजने के लिए पिक्सेल के संग्रह पर अनुक्रमित करने की समस्या को हल करने के बजाय, सरणी पर रेखांकन के बजाय।

data = """\
000000011111111000000000000000000000000
000000011111111000000000000000000000000
000000011111111000000000000000000000000
000000001111110000000001000000000110000
000000000111110000000011000000001111100
000000000011100000000000100000011111100
000000000000000000000000000000011111100
000000000000000000000000000000011111110
000000000000000000000000000000111111110
000000000000000000000000000000111111110
000000000000000000000000000000011111100
000000000000000000000000000000001000000
000000000000000000000000000000000000000"""

from collections import namedtuple
Point = namedtuple('Point', 'x y')

def points_adjoin(p1, p2):
    # to accept diagonal adjacency, use this form
    #return -1 <= p1.x-p2.x <= 1 and -1 <= p1.y-p2.y <= 1
    return (-1 <= p1.x-p2.x <= 1 and p1.y == p2.y or
             p1.x == p2.x and -1 <= p1.y-p2.y <= 1)

def adjoins(pts, pt):
    return any(points_adjoin(p,pt) for p in pts)

def locate_regions(datastring):
    data = map(list, datastring.splitlines())
    regions = []
    datapts = [Point(x,y) 
                for y,row in enumerate(data) 
                    for x,value in enumerate(row) if value=='1']
    for dp in datapts:
        # find all adjoining regions
        adjregs = [r for r in regions if adjoins(r,dp)]
        if adjregs:
            adjregs[0].add(dp)
            if len(adjregs) > 1:
                # joining more than one reg, merge
                regions[:] = [r for r in regions if r not in adjregs]
                regions.append(reduce(set.union, adjregs))
        else:
            # not adjoining any, start a new region
            regions.append(set([dp]))
    return regions

def region_index(regs, p):
    return next((i for i,reg in enumerate(regs) if p in reg), -1)

def print_regions(regs):
    maxx = max(p.x for r in regs for p in r)
    maxy = max(p.y for r in regs for p in r)
    allregionpts = reduce(set.union, regs)
    for y in range(-1,maxy+2):
        line = []
        for x in range(-1,maxx+2):
            p = Point(x, y)
            if p in allregionpts:
                line.append(str(region_index(regs, p)))
            else:
                line.append('.')
        print ''.join(line)
    print


# test against data set
regs = locate_regions(data)
print len(regs)
print_regions(regs)

प्रिंटों:

4
........................................
........00000000........................
........00000000........................
........00000000........................
.........000000.........1.........33....
..........00000........11........33333..
...........000...........2......333333..
................................333333..
................................3333333.
...............................33333333.
...............................33333333.
................................333333..
.................................3......
........................................

वाह ... मुझे नहीं पता कि क्या कहना है। बहुत ही शांत। और पूरी तरह से काम करता है। धन्यवाद पॉल।

इसमें इतना काम है, जब ऐसा करने में पहले से ही एक फ़ंक्शन है Scipy, जो शायद बहुत तेज है ^ ^ 'लेकिन वैसे भी एक अच्छा व्यायाम है और यह दर्शाता है कि सामान्य रूप से यह कैसे करना है। मैं तब मतदान करूंगा।
ज़ेल्फ़िर कल्स्टहल

13

आप उपयोग कर सकते हैं ndimage.label, जो ऐसा करने का एक अच्छा तरीका है। यह एक नया सरणी देता है, जिसमें प्रत्येक सुविधा का एक अद्वितीय मूल्य और कई सुविधाएँ होती हैं। आप एक कनेक्शन तत्व भी निर्दिष्ट कर सकते हैं।

import scipy
from scipy import ndimage
import matplotlib.pyplot as plt

#flatten to make greyscale, using your second red-black image as input.
im = scipy.misc.imread('blobs.jpg',flatten=1)
#smooth and threshold as image has compression artifacts (jpg)
im = ndimage.gaussian_filter(im, 2)
im[im<10]=0
blobs, number_of_blobs = ndimage.label(im)
print 'Number of blobls:', number_of_blobs

plt.imshow(blobs)
plt.show()

#Output is:
Number of blobls: 30

यहाँ छवि विवरण दर्ज करें


धन्यवाद फ्रैक्सल। यह पूरी तरह से एक त्वरित और गंदे समाधान के रूप में काम करता है, लेकिन शायद मुझे छवि की गुणवत्ता में सुधार करना चाहिए, क्योंकि आप देख सकते हैं कि बहुत सारे मर्ज किए गए सेल हैं। उत्तर 30 सेल होना चाहिए। एक बार फिर बहुत बहुत धन्यवाद। (संपादित करें: मैंने छवि की रिज़ॉल्यूशन गुणवत्ता में सुधार करने की कोशिश की और फिर इसे आपके कोड के साथ ब्लॉट कर दिया, लेकिन यह अभी भी बहुत सारी कोशिकाओं को मिलाता है। यह वैसे ही समतल होना चाहिए जैसे = 1 या इम्रेडेड कार्य?)

1
@ इब्राहिम सी। कर्ट - मैंने इसे सही करने के लिए अपडेट किया है (मैंने केवल देखा है!)। समस्या अपलोड की गई छवि थी jpg, इसलिए कलाकृतियों का भार था। चौरसाई और थ्रॉल्डिंग की छोटी मात्रा में हल होता है कि .. पीएनजी इमेज के लिए पूरी तरह से काम करना चाहिए (मुझे लगता है ...)

चौरसाई और थ्रेशोल्ड की आवश्यकता के बिना।

यह पूरी तरह से काम करता है। तुम सही हो। किसी और संशोधन की आवश्यकता के बिना, बस इसे jpg से png में बदलना पर्याप्त है। बहुत बहुत धन्यवाद। मेरे पास अब 2 से अधिक सही उत्तर हैं। मुझे नहीं पता कि क्या करना है और क्या कहना है: डी

@ इब्राहिम सी। कर्ट - लकी

6

यहाँ एक एल्गोरिथ्म है जो ओ (कुल पिक्सेल की संख्या + सेल पिक्सेल की संख्या) है। हम केवल सेल पिक्सल्स के लिए तस्वीर को स्कैन करते हैं, और जब हम एक खोज करते हैं, तो हम सेल को मिटा देते हैं।

आम लिस्प में कार्यान्वयन, लेकिन आप इसे तुच्छ रूप से पायथन में अनुवाद कर पाएंगे।

(defun flood-fill (picture i j target-color replacement-color)
  ;; http://en.wikipedia.org/wiki/Flood_fill
  (when (= (aref picture i j) target-color)
    (setf (aref picture i j) replacement-color)
    (when (plusp i)
      (flood-fill picture (1- i) j target-color replacement-color))
    (when (< (1+ i) (array-dimension picture 0))
      (flood-fill picture (1+ i) j target-color replacement-color))
    (when (plusp j)
      (flood-fill picture i (1- j) target-color replacement-color))
    (when (< (1+ j) (array-dimension picture 1))
      (flood-fill picture i (1+ j) target-color replacement-color)))
  picture)


(defun count-cells (picture)
  (loop
    :with cell-count = 0
    :for i :from 0 :below (array-dimension picture 0)
    :do (loop
          :for j :from 0 :below (array-dimension picture 1)
          :unless (zerop (aref picture i j))
          :do (progn (incf cell-count)
                     (flood-fill picture i j 1 0)))
    :finally (return cell-count)))




(count-cells
  (make-array '(128 171) :element-type 'bit
              :initial-contents
              #(#171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111000000000000000000001110000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111110000000000000000000011111100
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111000000000000000000000011111100
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111100
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111110
                #171*000000000001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111110
                #171*000000000011111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111110
                #171*000000000011111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111100
                #171*000000000011111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
                #171*000000000001111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
                #171*000000000001111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011
                #171*000000000000011110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011
                #171*000000000000011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111000000000000000000011
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111100000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111100000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111110000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111000000000000000000000111111110000000000000000000
                #171*000000000000000000111111000000000000000000000000000000000000000000000000000000111110000000000000000000000000000000000001111111100001111000000000011111110000000000000000000
                #171*000000000000000000111111100000000000000000000000000000000000000000000000000011111110000000000000000000000000000000000111111111100011111100000000011111100000000000000000000
                #171*000000000000000000111111100000000000000000000000000000000000000000000000000011111110000000000000000000000000000000000111111111110111111110000000000100000000000000000000000
                #171*000000000000000000111111100000000000000000000000000000000000000000000000000011111100000000000000000000000000000000000111111111110111111110000000000000000000000000000000000
                #171*000000000000000000111111100000000000000000000000000000000000000000000000000011111100000000000000000000000000000000000011111111100111111110000000000000000000000000000000000
                #171*000000000000000000111111100000000000000000000000000000000000000000000000000011111100000000000000000000000000000000000001111111100111111110000000000000000000000000000000000
                #171*000000000000000000011111100000000000000000000000000000000000000000000000000011111001110000000000000000000000000000000000011111000011111110000000000000000000000000000000000
                #171*000000000000000000010110000000000000000000000000000000000000000000000000000000000011111000000000000000000000000000000000000000000000111010000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111000000000000000000000000000000000000000000000000000000111100000000000000000000000
                #171*000000000000000000000000000000000000000000000111100000000000000000000000000000000000111100000000000000000000000000000000000000000000000000000011111111100000000000000000000
                #171*100000000000000000000000000000000000000000001111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111100000000000000000000
                #171*111100000000000000000000000000000000000000011111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111100000000000000000000
                #171*111100000000000000000000000000000000000000011111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111100000000000000000000
                #171*111100000000000000000000000000000000000000111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111100000000000000000011
                #171*111100000000000000000000000000000000000000111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011110000000000000000000111
                #171*111100000000000000000000000000000000000000011111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111
                #171*000000000000000000000000000000000000000000011111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011
                #171*000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111100000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111100000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111100000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111100000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000001111111100000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111100000000000000000000000000000000000000000111111000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111100000000000000000000000000000000000000111110000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111100000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111110000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111110000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111110000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000011111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000001111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000001111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000001111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000001111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000011111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000011111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000011111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000011111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000011000000000000000000000000000000000000000000000000000001111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000001111100000000000000000000000000000000000000000000000000000111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000011111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000111111110000000000000000000000000000000000000000011111100000000000000000000000000000000000000000000000000111111000000000000000000000000000000000000000000000
                #171*000000000000000111111111000000000000000000000000000000000000000011111100000000000000000000000000000000000000000000000001111111100000000000000000000000000000000000000000000
                #171*000000000000000111111110000000000000000000000000000000000000000111111110000000000000000000000000000000000000000000000001111111100000000000000000000000000000000000000000000
                #171*000000000000000111111110000000000000000000000000000000000000001111111110000000000000000000000000000000000000000000000001111111110000000000000000001111111000000000000000000
                #171*000000000000000011111110000000000000000000000000000000000000001111111110000000000000000000000000000000000000000000000001111111110000000000000000011111111100000000000000000
                #171*000000000000000001110000000000000000000000000000000000000000000111111110000000000000000000000000000000000000000000000000011111100000000000000000011111111100000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000111111100000000000000000000000000000000000000000000000000001111000000000000000000011111111100000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000011111000000000000000000000000000000000000000000000000000000000000000000000000000011111111100000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111100000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111000000000000000000000000000000000000000000001111111000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111100000000000000000000000000000000000000000000100010000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000001111100000000000000000111111110000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000011111110000000000000011111111110000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000011111110000000000000011111111110000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000011111110000000000000011111111110000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000011111111000000000000011111111110000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000011111110000000000000011111111100000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000001111100000000000000010111111100000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000001111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000001111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000001111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000011111111110000000000000000000000000000000000000011111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000011111111110000000000000000000000000000000000000111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000011111111110000000000000000000000000000000000001111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000001111111110000000000000000000000000000000000001111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000001111111000000000000000000000000000000000000001111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000000000000000000000000000000000011111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000011111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000011111100000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000001111111110000000000000110000000000000000000000001111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000001111111110000000000001111100000000000000000000011111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000001111111110000000000111111111000000000000000000011111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000111111110000000000111111111000000000000000000111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000111111111000000000111111111100000000000000000111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000011111100001111000111111111100000000000000000111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000111111100111111111100000000000000000011111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000000111111100011111111100000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                #171*000000000000000000000000001111111100011111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)))
--> 30

हे पास्कल, उत्तर के लिए बहुत बहुत धन्यवाद। मैं देख रहा हूं कि आपका कार्यक्रम सही उत्तर को बहुत सफाई से देखता है। समस्या यह है कि मुझे उस कॉमन लिस्प भाषा के बारे में कोई जानकारी नहीं है, लेकिन मैं कोशिश करूंगा कि इसे समझूं और पायथन में एक समान स्क्रिप्ट लिखूं।

3

एक उत्तर की तुलना में अधिक विस्तारित टिप्पणी:

जैसा कि @interjay ने संकेत दिया है, एक द्विआधारी छवि में, अर्थात एक जिसमें केवल 2 रंग मौजूद हैं, पिक्सेल 1 या 0. मान लेते हैं। यह आपके द्वारा उपयोग किए जा रहे छवि प्रतिनिधित्व प्रारूप में सही हो सकता है या नहीं भी हो सकता है लेकिन यह सच है अपनी छवि के 'वैचारिक' प्रतिनिधित्व में; इस मुद्दे पर कार्यान्वयन विवरणों को भ्रमित न होने दें। उन कार्यान्वयन विवरणों में से एक छवि की सीमा के आसपास 2s का आपका उपयोग है - छवि के आसपास मृत क्षेत्र की पहचान करने का एक पूरी तरह से समझदार तरीका है, लेकिन गुणात्मक रूप से छवि के बाइनरी-नेस को प्रभावित नहीं करता है।

एन, एनई, एनडब्ल्यू और डब्ल्यू पिक्सल की परीक्षा के रूप में: यह घटक के गठन में पिक्सल की कनेक्टिविटी के साथ करना है। प्रत्येक पिक्सेल (सीमा विशेष मामलों को बार) में 8 पड़ोसी (एन, एस, ई, डब्ल्यू, एनई, एनडब्ल्यू, एसई, एसडब्ल्यू) हैं, लेकिन कौन से एक ही घटक में शामिल होने के लिए उम्मीदवार हैं? कभी-कभी ऐसे घटक जो केवल कोनों (एनई, एनडब्ल्यू, एसई, एसडब्ल्यू) से मिलते हैं, उन्हें कभी-कभी जुड़ा हुआ नहीं माना जाता है।

आपको यह तय करना होगा कि आपके आवेदन के लिए क्या उपयुक्त है। मेरा सुझाव है कि आप हाथ से काम करें, अनुक्रमिक एल्गोरिथ्म के कुछ संचालन, प्रत्येक पिक्सेल के लिए अलग-अलग पड़ोसियों की जाँच करें, जो कि चल रहा है उसके बारे में महसूस करने के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.