Не знаю, как доработать программу

Форум, посвященный общим вопросам, связанным с MATLAB

Модератор: Admin

Денис96
Пользователь
Сообщения: 1
Зарегистрирован: Ср окт 10, 2018 8:59 pm

Не знаю, как доработать программу

Сообщение Денис96 » Ср окт 10, 2018 11:23 pm

Доброго времени суток, господа Форумчане! Открыл матлаб для себя недавно, увидел в ней вариант менее времязатратного способа подсчета коэффициентов в своей работе. Для этого необходимо составить программу. Сводится все к двум необходимым составляющим в оной: во-первых, нужно рассчитать процент черных пикселов на бинарном изображении (для контроля адекватности методики - заодно и и процент белых), а во-вторых, пакетная обработка изображений. Полазил по форуму, почесал затылок, кое-что нашел от обоих решений, в итоге, вышло следующее:

dirlist = dir('1\AN\*.jpg');

for k = 1:length(dirlist);
fname = dirlist(k).name;
[path,name,ext] = fileparts(fname);
a = imread(fullfile('1\AN', fname));
end
w = 123;
b = 122;
white = length(find(a>=w))/(length(find(a>=w))+length(find(a<=b)));
black = length(find(a<=b))/(length(find(a>=w))+length(find(a<=b)));

Проблема в следующем: Программа выдает мне проценты только для 9-го по счету файла, игнорируя все остальные. Не подскажете, как откорректировать данный алгоритм, чтобы он выдавал значения для всех изображений (их в директориях по 10-15 штук) и, по возможности, выводил в какую-нибудь таблицу? Спасибо большое!

CrabAlexey
Пользователь
Сообщения: 21
Зарегистрирован: Ср май 23, 2018 4:02 pm

Re: Не знаю, как доработать программу

Сообщение CrabAlexey » Пт окт 12, 2018 9:25 am

Ну да, считывает всё, но перезаписывает. Попробуй загнать 4 последние строчки тоже в цикл, вроде такого:

Код: Выделить всё

dirlist = dir('1\AN\*.jpg');
 
for k = 1:length(dirlist);
    fname = dirlist(k).name;
    [path,name,ext] = fileparts(fname);
    a = imread(fullfile('1\AN', fname));
    w = 123;
b = 122;
white = length(find(a>=w))/(length(find(a>=w))+length(find(a<=b)));
black = length(find(a<=b))/(length(find(a>=w))+length(find(a<=b)));
table(k,1)=white;% записывает значения в 1 столбец отдельного массива "table"
table(k,2)=black;% записывает значения в 2 столбец отдельного массива "table"
% alternative
alternative{1,1}='white'
alternative{2,1}='black'
alternative{3,1}='fname'
alternative{1,k+1}=white
alternative{2,k+1}=black
alternative{3,k+1}=fname
end

Про вывод в файл уже придумать можно самому))

UPD

Код: Выделить всё

zero{1,1}=strjoin({'white','black','filename'})
zero{k+1,1}=strjoin({num2str(white),num2str(black),fname})
fileIDq=fopen('222.txt','wt');% создание файла с возможостью перезаписи
fprintf(fileIDq,'%s\n',zero{:});% запись целочисленного массива в файл построчно
fclose(fileIDq);% закрытие созданного файла для редактирования
open('222.txt')