Jump to content
Compvision.ru

OmgZomg

Пользователи
  • Content count

    29
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by OmgZomg


  1. Всем привет!

    Есть изображение, на нем отрисовываются фигуры. В данном примере прямоугольник. Как с помощью numpy вырезать выделенную область изображения? Координаты, по которым строится прямоугольник

    "all_x": [
                        274,
                        374
                    ],
                    "all_y": [
                        309,
                        406

    Снимок экрана от 2021-03-16 14-13-01(1)(1).png


  2. Как теперь с этим всем хозяйством получить, насколько изображения перекрывают друг друга?

    У меня есть список дистанций между изображениями

    Часть списка для примера:

    {'filename1': 'dji_0666.jpg', 'filename2': 'dji_0667.jpg', 'distance': 1.4510858010828085}
    {'filename1': 'dji_0663.jpg', 'filename2': 'dji_0664.jpg', 'distance': 1.4625754772170405}
    {'filename1': 'dji_0652.jpg', 'filename2': 'dji_0653.jpg', 'distance': 1.7807144386327662}
    {'filename1': 'dji_0659.jpg', 'filename2': 'dji_0660.jpg', 'distance': 1.8890964513768231}
    {'filename1': 'dji_0644.jpg', 'filename2': 'dji_0645.jpg', 'distance': 1.9983018138089903}
    {'filename1': 'dji_0655.jpg', 'filename2': 'dji_0656.jpg', 'distance': 2.1954923719218247}
    {'filename1': 'dji_0647.jpg', 'filename2': 'dji_0648.jpg', 'distance': 2.3366167661177}

    И есть реальные размеры на каждом изображении.

    Понимаю, что нужно порог задать и всё такое. Но как воплотить в код, не пойму:huh:

    Вообще задача сводится к построению мозайки изображений


  3. Можно же через GSD,не?

    • Image Width: 4000px
    • Image Height: 3000px
    • Sensor Width: 13.2mm
    • Sensor Height: 4.55 mm
    • Focal Length: 3.57 mm
    • Высота полета 91.088004м

    Далее по формуле (https://www.propelleraero.com/blog/ground-sample-distance-gsd-calculate-drone-data/) расчитываем GSD  и получаем cm/px. В моем случае для одного из изображений  -3.94 cm/px

    Далее 4000*3.94 и 3000*3.94

    В итоге ширина/высота = 157,6м/118,2м

    Ну не красотенюшка ли?)

    • Like 1

  4. Нужно измерить на сколько изображения перекрывают друг друга

    Имеется lat,lon для каждого изображения

    Вычисляю разницу в метрах для каждого изображения

    from math import sin, cos, sqrt, atan2, radians
    R = 6373.0
    #для первых двух изображений
    lat1 = radians(123.114661)
    lon1 = radians(38.426805)
    lat2 = radians(123.114650)
    lon2 = radians(38.426831)
    dlon = lon2 - lon1
    dlat = lat2 - lat1
    a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
    c = 2 * atan2(sqrt(a), sqrt(1 - a))
    distance = R * c
    distance_in_meters=distance * 1000
    >>> distance_in_meters
    1.9983018138089903

    Теперь мне надо найти реальные размеры изображения. Не пиксельные, а в метрах.

    Как это сделать?

    Изображения представляют собой аэрофотоснимки с дрона.


  5. Вот так сделал

     

    	def match(self, i1, i2, direction=None):
    		imageSet1 = self.getSURFFeatures(i1)
    		imageSet2 = self.getSURFFeatures(i2)
    		print("Direction : ", direction)
    		matches = self.flann.knnMatch(
    			imageSet2['des'],
    			imageSet1['des'],
    			k=2
    			)
    		good = []
    		for i , (m, n) in enumerate(matches):
    			if m.distance < 0.7*n.distance:
    				good.append((m.trainIdx, m.queryIdx))
    
    		if len(good) > 4:
    			pointsCurrent = imageSet2['kp']
    			pointsPrevious = imageSet1['kp']
    
    			matchedPointsCurrent = np.float32(
    				[pointsCurrent[i].pt for (__, i) in good]
    			)
    			matchedPointsPrev = np.float32(
    				[pointsPrevious[i].pt for (i, __) in good]
    				)
    
    			H, s = cv2.findHomography(matchedPointsCurrent, matchedPointsPrev, cv2.RANSAC, 4)
    
    			return H,sum(s) / len(s)
    
    		return None
    
    	def getSURFFeatures(self, im):
    		gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    		kp, des = self.surf.detectAndCompute(gray, None)
    		return {'kp':kp, 'des':des}
          
          
          
        N = len(img_list)
        adjacency_matrix = np.zeros((N, N))
    
            for i in range(N):
            for j in range(i + 1, N):
                    out = s.matcher_obj.match(lst[i], lst[j], 'left')
                    if out is not None:
                        H, s = out
                        if s >= 0.5:
                            adjacency_matrix[i, j] = 1
                            adjacency_matrix[j, i] = 1
        print('AM',adjacency_matrix)

     


  6. 12 hours ago, Smorodov said:

    По горизонтали точки левого изображения, по вертикали правого, если соединяются то в пересечении 1 если нет, 0. 

    Получите матрицу смежности. Если есть качество сопоставления, можно сделать взвешенный граф, вместо 0 и 1 задавать вес. 

    Благодарю! Можно пример кода? Желательно на Python   Особенно интересует этот момент "Если есть качество сопоставления, можно сделать взвешенный граф, вместо 0 и 1 задавать вес. ". Не могу пока никак сообразить как это закодить:huh:


  7. Все изображения одинакового размера.

    Сделал так:

    на каждом изображении выбрал одну точку и посчитал смещение.

    Далее создал пустое изображение (numpy матрица с n каналов).

    И в эту пустую матрицу накидал изображений с учетом смещения.

    Все получилось.

    Вопрос: Я точку, чтобы посчитать смещение, на каждом изображении выбираю вручную. Можно ли как-то смещение найти автоматизированно?


  8. On 10/21/2020 at 6:27 PM, Smorodov said:

    А что должно получиться ? Насколько я помню, stack сделает 6 слойное изображение.

    Вы этого добиваетесь? Или нужно просто визуальное наложение с прозрачностью ? 

    Именно этого и добиваюсь. Я работаю с многослойными изображениями (мульти, гипер спектр).

    Сейчас я одноканальные изображения "накладываю" друг на друга без учета сдвига. Это не очень хорошо.

    Вот как этот сдвиг устранить?

    И, кстати, не только 6 слойное. Я и 13 слойное делал.


  9. Доброго времени суток, товарищи!

    Имеются изображения. Не могу приложить к теме, позволяет только 80кб файл.

    Их нужно наложить одно на другое. Но они со "сдвигом".

    Как правильно их наложить, учитывая сдвиг? Чтоб всё совпало

    Накладываю изображения с помощью функции numpy.stack()

    Благодарю!


  10. Всем доброго дня!

    Загружаю изображение в обученную модель

    from keras.models import load_model
    import numpy as np
    
    
    from keras.preprocessing import image
    model = load_model('my_model33-16.h5')
    
    
    img_path='/home/alexander/s_gray/3_39095_31718.png'
    img = image.load_img(img_path)
    img_tensor = image.img_to_array(img)                  
    img_tensor = np.expand_dims(img_tensor, axis=0)        

     

    Выдает ошибку

    ValueError: Error when checking input: expected img to have shape (128, 128, 1) but got   array with shape (128, 128, 3)

    Изображения уже переведены в grayscale

    import os
    from PIL import Image
    files = os.listdir('/home/alexander/s2/')
    for f in files:
        img=Image.open('/home/alexander/s2/'+f)
        gray = img.convert('L')
        im_resized = gray.resize((128, 128))
        im_resized.save('/home/alexander/s_gray/'+f)

    Что не так?)


  11. 19 hours ago, Nuzhny said:

    Кажется, что на сшитом уже ничего особо не сделаешь - раньше надо было делать то, что используется в stitching методах. А тут разве что классический deblocking может зайти, чтобы не попортить информацию. Debloking - это просто фильтр вдоль границ склейки по сути.

    А есть где реализация этого фильтра на Python?

    Найти нигде не могу


  12. Добрый день!

    Есть набор изображений с разной степенью яркости.

    Два из них привожу для примера. Третий файл - это блендинг двух изображений, где разница яркости отчетливо видна.

    Как усреднить яркость,чтобы они были более менее одинаковы?

    Спасибо

     

    727_41416_25052.png

    734_40760_25052.png

    apple_orange.jpg


  13. Посмотрел Ваш код на гитхабе. Я так понял,чт он основан на питоновской библиотеке imreg. Мне как раз на питоне и нужно.Функция 'imreg.similarity' как раз возвращет angle. Это именно тот угол,который я пытаюсь определить?

    
     

     


  14. 10 minutes ago, Smorodov said:

    Там в ответе про угол обзора камеры, а не про поворот вообще. 

    Можете схему эксперимента обрисовать, чтобы понятно было относительно чего меряется угол ? Одинаковые ли изображения ?

    Просто по одному произвольному изображению ничего о камере сказать нельзя. Есть специально созданные картинки, типа шахматки или маркеров для дополненной реальности, но о них мы все знаем.

    Микроскоп едет по столу, где находится образец ткани и фотографирует его.

    Нужно определить угла поворота камеры относительно осей стола, и обрезать кадр под параллели стола.

     

    Из входных данных имеем фотографии под разными углами и координаты изображений.

     

    Прикладываю несколько изображений для примера

    Здесь все изображения

    https://1drv.ms/u/s!AspbIoSXqblwgoYEys3rWo9Fp9tLDg?e=Rs4VnP

    5_24762_23018.png

    10_28197_23018.png

×