обрезать изображения с разными черными полями - PullRequest
0 голосов
/ 25 октября 2018

У меня есть набор данных изображения, и прежде чем передать его в алгоритм глубокого обучения, мне нужно обрезать его до того же размера.Все изображения имеют разные размеры черных полей, как показано на рисунке ниже.Любые предложения по способу обрезки изображений с разным размером поля.enter image description here

enter image description hereenter image description here

Ответы [ 4 ]

0 голосов
/ 01 ноября 2018

Вот код решения для этого вопроса:

import warnings
warnings.filterwarnings('always')
warnings.filterwarnings('ignore')
import cv2
import numpy as np
import os

path = "data/benign/"
img_resized_dir = "data/pre-processed/benign/"
dirs = os.listdir(path)

def thyroid_scale():
    for item in dirs:
    if os.path.isfile(path+item):
        img = cv2.imread(path+item)
        gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        ret,thresh = cv2.threshold(gray,0,255,0)
        im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

        areas = [cv2.contourArea(c) for c in contours]
        max_index = np.argmax(areas)
        cnt=contours[max_index]
        x,y,w,h = cv2.boundingRect(cnt)
        crop_img = img[y+35:y+h-5,x+25:x+w-10]
        resize_img = cv2.resize(crop_img, (300, 250), interpolation = cv2.INTER_CUBIC)
        cv2.imwrite(img_resized_dir+item, resize_img)

thyroid_scale()
0 голосов
/ 25 октября 2018

Один из способов может быть следующим:

  • Залить заливкой изображение красным цветом, начиная с верхнего левого угла и допуская около 5% отклонения от черного пикселя.

enter image description here

  • Теперь сделайте все, что не красным, в белый цвет - потому что следующий шаг после этого ищет белые пиксели.

enter image description here

  • Теперь используйте findContours() (который ищет белые объекты) и выберите самый большой белый контур в качестве изображения и обрежьте его.

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

  • Вы можете нормализовать копию изображения до полного диапазона.сначала от черного к белому в случае, если вы получаете какие-либо с почти черными границами.

  • Вы можете проверить, что более одного или все угловые пиксели на самом деле черные, если вы получаете изображения безborder.

  • Вы также можете отмечать проблемы, если ваш обрезаетсяизображение кажется меньше, чем, скажем, 70% от общей площади изображения.

  • Вы можете рассматривать морфологическое отверстие с квадратным структурирующим элементом 9x9 как предпоследний шаг, чтобы привести в порядок вещи перед findContrours().

enter image description here

0 голосов
/ 25 октября 2018

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

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

0 голосов
/ 25 октября 2018

Сначала выполните пороговое значение с пороговым значением низкой интенсивности (если ваш фон определенно полностью черный, вы можете даже пороговое значение с интенсивностью 1), чтобы определить всекомпоненты.

Далее используйте Маркировка подключенного компонента для определения всех изолированных компонентов переднего плана.Центральное сканирующее изображение, которое вас интересует, должно всегда давать самый большой компонент.Вырежьте этот самый большой компонент, чтобы убрать границу вместе со всеми возможными не черными артефактами (метками, буквами и т. Д.).У вас должно остаться только сканирование без полей.

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

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