Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 4
1

Random forest

20.01.2015, 03:37. Просмотров 1047. Ответов 1
Метки нет (Все метки)

файл классификатор для поиска
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
function number = CarNumberRecognition2(filename, vd)
    
   load model;
   I = imread(filename);
   chars = '0123456789ABCEHKMOPTXY';
   outstr = '     ';
   
   Ires = imresize(I, [200 NaN]);
   [m n] = size(Ires);
   Ires = imcrop(Ires,[10 0 n-10 m]);
   
   
   OutI = zeros([size(Ires) 3],'uint8');
   OutI(:,:,1) = Ires;
   OutI(:,:,2) = Ires;
   OutI(:,:,3) = Ires;
   [a b] = size(Ires);
   shift = a*b;
   
   Imod = imfilter(imadjust(Ires),fspecial('unsharp'));
   LMap = medfilt2(Ires,[90 90],'symmetric');
 
   Imod = (imadjust(0.7*Imod - 0.7*LMap) < 10);
   
   NewI = zeros(size(Imod),'uint8');
   areas = regionprops(Imod,'Image','Perimeter','EulerNumber','BoundingBox','Area','Orientation','Eccentricity','PixelIdxList');
   
   if vd,figure,end
   
   for i=1:size(areas)
            if ~ ( test(areas(i)))
                NewI(areas(i).PixelIdxList(:))= 255;
            else
                for j=1:size(areas(i).PixelIdxList(:))
                    OutI(areas(i).PixelIdxList(j)) = OutI(areas(i).PixelIdxList(j)) * 2;
                end
            end
   end
   
   NewMod = NewI == 255;
   fprintf('%s -> ',filename);
   X = zeros([1 134]);
   p = 1;
   areas = regionprops(NewMod,'Image','EulerNumber','BoundingBox','Area','Orientation','Eccentricity','PixelIdxList');
   for i=1:size(areas)
       subplot(3,10,p);
       p = p +1;
       
       symbol = areas(i).Image;
       [width height] = size(symbol);
       symmod = imresize(symbol, 10*size(symbol));
       symmod = imadjust(symmod) < 50;
       symar = struct('data',{});
       symar(1:10,1:10) = struct('data',zeros([width height],'uint8'));
       data = zeros([10 10],'double');
       for i=1:10
           for j=1:10
               symar(i,j).data = symmod( ((i-1)*width+1) : (i*width) , ((j-1)*height+1) : (i*height)) ;
               inf = regionprops(symar(i,j).data,'Area');
               if ~isempty(inf)
                   data(i,j) = inf(1).Area / (width*height);
               else
                   data(i,j) = 0;
               end
           end
       end
       
       waimage = regionprops(symmod,'all');
       X(1) = waimage(1).EulerNumber;
       X(2) = waimage(1).Eccentricity;
       X(3) = waimage(1).Centroid(1)/waimage(1).BoundingBox(3);
       X(4) = waimage(1).Centroid(2)/waimage(1).BoundingBox(4);
       X(5) = waimage(1).Orientation;
       X(6) = waimage(1).BoundingBox(3)/waimage(1).BoundingBox(4);
       X(7:106) = data(:);
       
            
       Y = classRF_predict(X,model);
       title(chars(Y));
       if vd
                for j=1:size(areas(i).PixelIdxList(:))
                    OutI(areas(i).PixelIdxList(j)+ shift) = OutI(areas(i).PixelIdxList(j)+shift) + 70;
                end
       end
       outstr(i) = chars(Y);
   end
   while (isletter(outstr(1))  && isletter(outstr(2))) || (~isletter(outstr(1))  && isletter(outstr(2)))
       outstr(1:size(outstr,2)-1) = outstr(2:size(outstr,2));
   end
   
   fprintf('%s (origin. %s)\n',outstr(1: ( min ( 6 , size ( outstr,2 ) ) ) ) ,outstr);
   if vd
       subplot(3,1,3);
       imshow(OutI);
   end
   number = sprintf('%s',outstr(1: ( min ( 6 , size ( outstr,2 ) ) ) ) );
end
 
function good = test(area)
       good = (area.Area > 3500 ||...
                area.Area < 400 || ...
                area.Area > 0.8*area.BoundingBox(3)*area.BoundingBox(4) ||...
                area.EulerNumber > 2 ||...
                (abs(area.Orientation) < 25 && area.Eccentricity > 0.8)||...
                area.BoundingBox(4)/area.BoundingBox(3) > 11 ...
       );
 end
при попытке вызвать функцию для картинки с номером, который нужно распознать вылазит такая ошибка. В чём может быть проблема и как её решить?
>> CarNumberRecognition2('TestImages\1.bmp', 1)
TestImages\1.bmp -> Error using iptcheckinput
Function IMADJUST expected its first input, I,
to be one of these types:

double, uint8, uint16, int16, single

Instead its type was logical.

Error in imadjust>parseInputs (line 211)
iptcheckinput(img, {'double' 'uint8' 'uint16' 'int16'
'single'}, ...

Error in imadjust (line 98)
[img,imageType,lowIn,highIn,lowOut,highOut,gamma] = ...

Error in CarNumberRecognition2 (line 52)
symmod = imadjust(symmod) < 50;
0
Вложения
Тип файла: rar rf.rar (3.02 Мб, 7 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2015, 03:37
Ответы с готовыми решениями:

Weka. Как правильно задать параметры классификатора Random Forest?
Здравствуйте. Занимаюсь машинным обучением с помощью библиотеки Weka. Язык: C#. Всё вроде...

Что не так с 'Random' или There is no overloaded version of 'Random' that can be called with these arguments
Доброго времени суток! Я с программированием на &quot;Вы&quot;, поэтому очень прошу доходчиво объяснить, что...

У меня непонятки с методами Math.random() и Random()
Задача : заполнить массив из 15 элементов случайным образом вещественными значениями х (-5 &lt;= x &lt;=...

Random, повторы при static Random(1 seed)
Добрый вечер. Использую private static readonly Random, так как крутится в цикле и если убрать...

1
19 / 19 / 9
Регистрация: 26.07.2013
Сообщений: 45
20.01.2015, 11:54 2
Цитата Сообщение от Ошавот Посмотреть сообщение
CarNumberRecognition2('TestImages\1.bmp', 1)
TestImages\1.bmp -> Error using iptcheckinput
Function IMADJUST expected its first input, I,
to be one of these types:
double, uint8, uint16, int16, single
Instead its type was logical.
Ошибка указывает на то, что входной массив имеет неверный тип данных (логический). Смотрите, где такой тип данных у Вас получается - исправляйте. В код RF не полезу. Ещё как вариант, посмотрите правильный ли тип данных Вы исходно подаете...Может матрица должна быть полутоновая (в смысле размерности MxN, а не MxNx3).

Так мысли в слух. Для классификатора, конечно, намного лучше подавать чисто одну рамку с номером, а не её окрестность...

Добавлено через 25 минут
Цитата Сообщение от Ошавот Посмотреть сообщение
symmod = imadjust(symmod) < 50;
Перепишите строку в виде:

Matlab M
1
symmod = double(imadjust(double(symmod)) < 50);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2015, 11:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Когда твой Random совсем не Random
Мой код ведет себя весьма странно. У меня есть список экземпляров класса в котором (Уж простите что...

Random и объекты класса (pseudo random)
Всем привет. Есть класс: typedef unsigned int ui; class Player { private: ui health;

Переделать Math.random() в random()
public static void CompMove() { int x = (int) (Math.random() * 3), y = (int) (Math.random() *...

Random
Добрый день вопрос в таком как исключить повтор числа int a; a= rnd.Next(1,4);


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.