Пытаюсь присоединиться к 3 картинкам - PullRequest
0 голосов
/ 05 мая 2018

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

Общий размер изображения равен размеру образца. Это прямоугольник 5см на 120см. Это накопительное изображение.

enter image description here

На кумулятивном графике аспекты менее прямоугольные, так как вся активность происходит между электродами, поэтому при предварительном суммировании кадров я отбрасывал области, которые не были между электродами, для улучшения характеристик.

Это изображение было получено с помощью matplotlib со струйной раскраской. Таким образом, это была изначально матрица данных. Чтобы добавить его к эталонному изображению, я сохранил это изображение в формате png и перезагрузил его. Эта операция немного изменила соотношение сторон, но позже я изменил его размер правильно.

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

def overlay(background_img, img_to_overlay_t, x, y, negpos, overlay_size=None):

    bg_img = background_img.copy()

    if overlay_size is not None:
        img_to_overlay_t = cv.resize(img_to_overlay_t.copy(), overlay_size)

    # Extract the alpha mask of the RGBA image, convert to RGB 
    b,g,r,a = cv.split(img_to_overlay_t)
    overlay_color = cv.merge((b,g,r))

    # Apply some simple filtering to remove edge noise
    mask = cv.medianBlur(a,5)

    #mask = np.zeros(source_img.shape[:2], np.uint8)
    h, w, _ = overlay_color.shape
    roi = bg_img[y:y+h, x:x+w]

    ## works sort of but with removed details
    #mask = mask.astype(np.int8)        

    # Black-out the area behind the logo in our original ROI
    img1_bg = cv.bitwise_and(roi.copy(),roi.copy(),mask = cv.bitwise_not(mask))

    # Mask out the logo from the logo image.
    img2_fg = cv.bitwise_and(overlay_color,overlay_color,mask = mask)

    img2_fg = img2_fg.astype(np.float32)
    img1_bg = img1_bg.astype(np.float32)

    if negpos == False:
        bg_img[y:y+h, x:x+w] = cv.subtract(img1_bg, img2_fg)
    else:
        bg_img[y:y+h, x:x+w] = cv.add(img1_bg, img2_fg)


    return bg_img

Это дает эту диаграмму. enter image description here

До этого момента все работало нормально. Проблема пыталась добавить кумулятивный между электродами. Моя проблема заключается в том, что я не могу вставить этот кумулятивный график в эталонное изображение электродов и общий размер выборки. Я получаю

OpenCV(3.4.1) Error: Assertion failed ((mtype == 0 || mtype == 1) && _mask.sameSize(*psrc1))

в

img1_bg = cv.bitwise_and(roi.copy(),roi.copy(),mask = cv.bitwise_not(mask))

Я могу это исправить, применив маску к uint8 или int8. mask = mask.astype(np.uint8)

У этого есть свои проблемы, так как синяя часть разряда теряет все функции и в основном состоит только из 3 разных цветов.

Это результат, который я хотел бы отобразить / сохранить в конце. Я понятия не имею, как добраться до него.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...