def setCanvas(self, astroIm, update=False): #Raster Main image self.internalAstroImg = astroIm self.imageTK = self.internalAstroImg.getImageTK() print "\n\nINFO" print self.internalAstroImg.statisticalInfo() self.staMeanValue.config(text = str('%.2f' % self.internalAstroImg.statisticalInfo()[0])) self.staStdValue.config(text = str('%.2f' % self.internalAstroImg.statisticalInfo()[1])) self.staNCandidatesStarsValues.config(text = str(self.internalAstroImg.starCandidates)) self.staNStarsValues.config(text = str(len(self.internalAstroImg.lCandidates))) self.staAreaGalaxiesValues.config(text = str('%.2f' % self.internalAstroImg.contourMeanArea)) self.staNGalaxiesValues.config(text = str(len(self.internalAstroImg.nContours))) print "\n\n" self.canvasImg = self.canvas.create_image(0,0, image=self.imageTK) self.imgConfigure() #Histogram self.histogramFrame = tk.LabelFrame(self.tabProcessing, text="Histogram") self.histogramFrame.grid(column=1,row=2, padx=5, columnspan=5) #Vector self.imageVector = self.internalAstroImg.getVectorImage() self.vectorImage = self.vectorCanvas.create_image(336,336, image = self.imageVector) if (update==False): self.matPlotHistogram = MatPlotHistogram(self.histogramFrame, self.internalAstroImg.getHistogram()) #Raster thumbnails self.thumbDarkAstro = self.internalAstroImg.getThumb("dark") self.thumbDarkImage = self.miniCanBlack.create_image(50,50, image=self.thumbDarkAstro) self.thumbDifusseAstro = self.internalAstroImg.getThumb("difusse") self.thumbDifusseImage = self.miniCanDifusse.create_image(50,50, image=self.thumbDifusseAstro) self.thumbPeakAstro = self.internalAstroImg.getThumb("peak") self.thumbPeakImage = self.miniCanPeak.create_image(50,50, image=self.thumbPeakAstro) #Calculate background: blackMedian, nIter = cvSpace.sky_median_sig_clip(self.internalAstroImg.imageCVOriginal, 5, 0.1, max_iter=20) self.fluxDarkIndex.config(text = str(blackMedian)) self.fluxPeakIndex.config(text = str(int(self.internalAstroImg.peakThreshold))) print "blackMedian: "+str(blackMedian)+" nIter: "+str(nIter) self.thumbDarkAstro = self.internalAstroImg.modifyThumb(thumb= "DARK", value = blackMedian) self.miniCanBlack.itemconfigure(self.thumbDarkImage, image=self.thumbDarkAstro) #Draw line on histogram self.matPlotHistogram.setLine(blackLine = int(blackMedian)) #TODO: change for the median of the subHistogram from blackMedian to self.internalAstroImg.peakThreshold tempDiffuseLine = int(blackMedian+self.internalAstroImg.peakThreshold/2) if (tempDiffuseLine>self.internalAstroImg.peakThreshold*0.9): tempDiffuseLine = tempDiffuseLine * 0.85 tempDiffuseLine = self.matPlotHistogram.getMedianOfSubset(blackMedian, self.internalAstroImg.peakThreshold) self.matPlotHistogram.setLine(difusseLine = tempDiffuseLine) self.fluxDifusseIndex.config(text = str(tempDiffuseLine)) self.matPlotHistogram.setLine(peakLine = int(self.internalAstroImg.peakThreshold))
candidato = detector.detect(img) print "[getIntersetObjectList] hay un total de "+str(len(candidato))+" candidatos" return candidato def cutImage(img, center, r=32): #cv2.circle(img, (int(center.pt[0]),int(center.pt[1])), 10, (255,255,0)) return img[int(center.pt[1]-r):int(center.pt[1]+r), int(center.pt[0]-r):int(center.pt[0]+r)] #im = cv2.imread("miniSetEstrellayGalaxia.png", cv2.IMREAD_GRAYSCALE) im = cv2.imread("o-HUBBLE-UV-900.jpg", cv2.IMREAD_GRAYSCALE) im2 = im.copy() print "Tipo de la imagen: "+str(type(im)) print "#############################" sig_fract = 5 percent_fract = 0.01 skyMedian, nIter = cvSpace.sky_median_sig_clip(im, sig_fract, percent_fract, max_iter=200) print "skeMedian: "+str(skyMedian) + " iterations: "+str(nIter) print "#############################" keyPoints = getIntersetObjectList(im) print "Punto y coordenada:" print str(type(keyPoints)) resultado = cv2.drawKeypoints(im, keyPoints, np.array([]), (255,255,0), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) resultado = im #for item in keyPoints: #print str(item.pt[0])+", "+str(item.pt[1]) #cv2.circle(resultado, (int(item.pt[0]),int(item.pt[1])), 5, (255,255,0)) print "Tomamos el primero" cualStar = 1 print str(keyPoints[cualStar].pt[0])+", "+str(keyPoints[cualStar].pt[1]) for i in range(1, 64, 1):
def updateImage(self, scaleFactor=1): print "[AstroImage::updateImage] self.scaleFactor: "+str(self.scaleFactor) self.imagePil = Image.fromarray(self.imageCV) self.imageTK = ImageTk.PhotoImage(image=self.imagePil) self.histogram = self.updateHistogram() (self.staMean, self.staStd) = cv2.meanStdDev(self.imageCV) self.staMean = self.staMean[0][0] self.staStd = self.staStd[0][0] print ">>>>>>>>>>Mean>>> "+str(self.staMean) print ">>>>>>>>>>Std>>>> "+str(self.staStd) print "[AstroImage::updateImage] calling to cvSpace.getContours" #################################OBTENCION#################################### ############################## getContours ################################### #################### obtencion de candidatos contornos ####################### blackMedian, nIter = cvSpace.sky_median_sig_clip(self.imageCVOriginal, 5, 0.1, max_iter=20) self.darkImage = self.generateDarkImage(blackMedian) print "Linea de Espacio Vacio: "+str(blackMedian) self.nContours, self.contourMeanArea = cvSpace.getContours(cv2.convertScaleAbs(self.darkImage)) self.nContours = cvSpace.removeContourInsideContour(self.nContours) print "[AstroImage::updateImage] calling to cvSpace.getObjectList" #################################OBTENCION#################################### ###############################getObjectList################################## ################# obtencion de candidatos ptos Luminosos ##################### temp8bit = cv2.convertScaleAbs(self.imageCV) self.peakThreshold, self.lCandidates, self.peakCVImage, self.starCandidates = cvSpace.getObjectList(temp8bit, self.darkImage)#, debug = True)#self.imageCV) self.thumbPeak = ImageTk.PhotoImage(Image.fromarray(cv2.resize(self.peakCVImage, (100, 100)))) print "[AstroImage::updateImage] Preparing vector canvas" #########################DRAW INTEREST POINTS AND CONTOURS#################### #self.contourImage = cv2.cvtColor(cv2.convertScaleAbs(self.darkImage).copy(), cv2.COLOR_GRAY2RGB) self.contourImage = cv2.cvtColor(cv2.convertScaleAbs(self.imageCV).copy(), cv2.COLOR_GRAY2RGBA) print "\n\n-------------------------"+str(len(self.lCandidates))+"---------------------------\n" for k in self.lCandidates: if k[3] == 0:#Estimated Galaxi point cv2.circle(self.contourImage, (int(k[0]),int(k[1])), k[2], (255,0,0,255),-1) if k[3] == 1:#Extimated Star or galaxy point cv2.circle(self.contourImage, (int(k[0]),int(k[1])), k[2], (0,255,0,250),-1) if k[3] == 0:#Start Point cv2.circle(self.contourImage, (int(k[0]),int(k[1])), k[2], (255,0,0,250),-1) index = 0 self.galaxiCenters = np.array([[-1,-1]]) print "[AstroImage::updateImage] Rasterizing vector data from contours" for c in self.nContours: cR = np.random.randint(0,255) cB = np.random.randint(100,255) cG = np.random.randint(150,255) color = (cR, cB, cG, 255) cv2.drawContours(self.contourImage, self.nContours, index, color, 3) height, width = self.imageCV.shape tempMaks = cvSpace.getMaskFromContour(c, width, height) tempIMG = cvSpace.maskImage(self.imageCV, tempMaks) tempCenter = cvSpace.getGalaxyCenter(tempIMG) cv2.rectangle(self.contourImage, (tempCenter[0]-5,tempCenter[1]-5), (tempCenter[0]+5,tempCenter[1]+5), (255,215,0,255), -1) cv2.rectangle(self.contourImage, (tempCenter[0]-5,tempCenter[1]-5), (tempCenter[0]+5,tempCenter[1]+5), (0,0,0,255)) #print "_______________________________________________________" #print "Centro de la galaxia: "+str(tempCenter[0])+", "+str(tempCenter[1]) #print "_______________________________________________________" self.galaxiCenters = np.append( self.galaxiCenters, [[tempCenter[0],tempCenter[0]]], axis=0 ) index = index + 1 self.galaxiCenters = np.delete(self.galaxiCenters, 0, axis = 0) print "Number of contours: "+str(len(self.nContours))+" vs "+str(len(self.galaxiCenters))+" ##############"