Проблема при попытке реализовать технику сегментации при свертке с фильтром RGB - PullRequest
0 голосов
/ 18 июня 2019

Я занимаюсь исследованием сегментации изображения апельсинового дерева [Изображение 5].

Я пытаюсь воспроизвести и экспериментировать с Маликом, Зеешаном и Зиауддином, Шейхом и Ахмадом, Рейяном и Сафи, Асадом. (2016). Обнаружение и подсчет цитрусовых на деревьях для оценки урожайности. Международный журнал передовых компьютерных наук и приложений. 7. 10.14569 / IJACSA.2016.070569. [Изображения 1 и 2]

Техника, которую я хочу использовать, - свертка изображения с маской фильтра (описана в статье, о которой я упоминал, и в статье ниже, на букве B).

В статье MALIK (2016) используется метод, представленный в статье А. Б. Пейн, К. Б. Уолш, П. Субеди и Д. Джарвис, «Оценка урожайности манго с использованием метода анализа изображений - сегментация», «Компьютеры и электроника в Сельское хозяйство, вып. 91, с. 57–64, 2013. [Изображения 3 и 4]

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

Я работаю с ноутбуками Python 3, OpenCV и Jupyter. Сначала я попытался вычислить NDI:

NDI =  np.ones(np.shape(fruta), dtype= 'float64')
for i in range (len(fruta)):
    for j in range (len(fruta[i])):
        if (fruta[i,j,1] + fruta[i,j,2]) == 0:
            NDI[i,j,0] = 0
        else:
            NDI[i,j,0] = int( int(int(fruta[i,j,1]) - int(fruta[i,j,2]) ) / int(int(fruta[i,j,1]) + int(fruta[i,j,2]) ) )

Я получил эту ошибку:

C:\Users\pili_\Anaconda3\envs\python-cvcourse\lib\site-packages\ipykernel_launcher.py:4: RuntimeWarning: overflow encountered in ubyte_scalars after removing the cwd from sys.path.

Это похоже на ошибку с форматом изображения или чем-то еще.

Я также пытался использовать эффект (свертка с фильтром), который хочу реализовать, но результат неудовлетворительный, я не знаю, правильно ли я его применил (я применил его без применения NDI первым, это проблема?) :

frutaNovo =  np.ones(np.shape(fruta), dtype= np.uint8)
frutaRGB = np.ones(np.shape(fruta), dtype = np.uint8)
kernel = np.ones((3,3),np.float32)/9
frutaRGB = cv2.filter2D(frutaLab, -1, kernel)
for i in range(len(frutaLab)):
        for j in range(len(frutaLab[i])):
            soma = (int(frutaRGB[i,j,0]) + int(frutaRGB[i,j,1]) + int(frutaRGB[i,j,2]))
            if soma == 0:
                frutaNovo[i,j] = 0
            else: 
                frutaNovo[i,j] = soma/3
ret, frutaNovo = cv2.threshold(frutaNovo,150,255,cv2.THRESH_BINARY)
displaygray(frutaNovo)

Малик бумага: [Изображение 1]

MALIK Paper

Малик результаты: [Изображение 2]

Malik results

Бумага Пейна: [изображение 3]

Payne paper

Результаты Пейна: [изображение 4]

Payne results

Исходное изображение: [изображение 5]

Original Image

Мой результат: [изображение 6]

My result

...