def diffCheckProcess(self):
        interval = self.param['interval']

        while True:
            sTime = FXTimeUtil.getT()

            if self.movementValMean < self.param['movementCheck']['thr']:
                if self.debugLevel >= 2:
                    print "no movements. diff check"

                img = self.getImg()
                if img==None:
                    continue

                imgGray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
                imgGray = cv2.GaussianBlur(imgGray, (5,5),0)

                lapImg = cv2.Laplacian(imgGray, cv2.CV_32F, ksize=3)






                #lapImg = lapImg.astype(np.uint8)

                #conjunction
                #kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
                #lapImg = cv2.dilate(lapImg, kernel, iterations=2)
                #lapImg = cv2.erode(lapImg, kernel, iterations=2)

                if self.diffCheckImg == None:
                    self.diffCheckImg = lapImg

                diffImg = cv2.absdiff(lapImg, self.diffCheckImg)
                ret, diffImg = cv2.threshold(diffImg, 10, 255, cv2.THRESH_BINARY)
                diffImg = diffImg.astype(np.uint8)

                #noise reduction
                kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
                diffImg = cv2.erode(diffImg, kernel, iterations=2)
                diffImg = cv2.dilate(diffImg, kernel, iterations=2)

                diffImg = cv2.bitwise_and(diffImg, self.diffCheckMask)

                if self.debugLevel >= 1:
                    dispImg = diffImg.copy()
                    dispImg = FXImageUtil.scaleImage(diffImg, 0.25)
                    cv2.imshow("diffImg", dispImg)

                val = cv2.mean(diffImg)
                val = float(val[0])

                self.diffVal = val

                self.diffCheckImg = lapImg

                if self.debugLevel >= 2:
                    print "HD difference val: %f" % self.diffVal

                if useRoyWeb:
                    ps.send('diff', self.diffVal, 'v', 'diffVal')

                if self.diffVal > self.param['thr']:
                    print "difference is detected"

                    thumbSize = self.param['dstThumb']['size']
                    thumbImg = cv2.resize(img, (thumbSize[0], thumbSize[1]))

                    if self.thumbRectFlag:
                        kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (100, 100))
                        diffImgArea = cv2.dilate(diffImg, kernel)
                        diffImgArea = cv2.erode(diffImgArea, kernel)

                        contours, hierarchy = cv2.findContours(diffImgArea, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

                        #get max rectangle
                        areas = [cv2.contourArea(contour) for contour in contours]
                        cnt_max = [contours[areas.index(max(areas))]][0]
                        rect = cv2.boundingRect(cnt_max)

                        #draw rectangle
                        offset = 20
                        pt1 = (int((rect[0]-offset) * self.thumbScale), int((rect[1]-offset) * self.thumbScale))
                        pt2 = (int((rect[0]+rect[2]+offset) * self.thumbScale), int((rect[1]+rect[3]+offset) * self.thumbScale))
                        cv2.rectangle(thumbImg, pt1, pt2, self.thumbRectColor, thickness=self.thumbRectThickness)


                    self.handleWBCapture(img, thumbImg)



                    if self.debugLevel >= 1:
                        dispImg = FXImageUtil.scaleImage(img, 0.25)
                        cv2.imshow("captured wb", dispImg)
                        dispImg = FXImageUtil.scaleImage(diffImg, 0.25)
                        cv2.imshow("captured wb diff", dispImg)

            else:
                if self.debugLevel >= 2:
                    print "movement is detected. skip diff check"


            duration = FXTimeUtil.getT() - sTime

            if duration < interval:
                time.sleep(interval - duration)
                duration = interval

            cv2.waitKey(1)