Как я могу улучшить удобство использования кода Matlab - PullRequest
0 голосов
/ 02 июня 2019

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

% read images
image_1=readNPY('image_1.npy');
image_2=readNPY('image_2.npy');
...
image_12=readNPY('image_12.npy');

% change from type uint16 to double and calculate the maximum
image1=double(image_1);
image1MAX=max(max(image1));
...
image12=double(image_12);
image12MAX=max(max(image12));

% normalizes to the maximum
reference = exp(-1)
IMAGE1=fix(image1./image1MAX/reference);
...
IMAGE12=fix(image12./image12MAX/reference);

% calculate the spot size
spot_image1 = 2*sqrt(size(nonzeros(IMAGE1),1)/pi)/1000;
...
spot_image12 = 2*sqrt(size(nonzeros(IMAGE12),1)/pi)/1000;

% plot the spot size
spot = [spot_image1 spot_image2 ... spot_image12]
xvalue = [1 2 3 4 5 6 7 8 9 10 11 12]
plot(xvalue, spot)

Код работает хорошо, мой вопрос: если у меня 52 изображения вместо 12 изображений, нужно ли добавлять 40 строк для каждого вычисленияили есть более разумный способ реализовать это?(Надеюсь, вы понимаете мои сомнения, спасибо!)

1 Ответ

0 голосов
/ 02 июня 2019

Предполагается, что имена ваших файлов изображений имеют формат:

' image_1.npy ', ' image_2.npy ', ... ' image_10.npy ', ' image_11.npy ...

Вариант 1 - использование ячеек и числовых массивов: Вы можете сгенерировать имена файлов в массиве ячеек и прочитать их в цикле, используя ячейки и числовые массивы для вычисления данных для каждого изображения:

% Number of image files
mumImages = 112;

% Generate image file names with desired format
imageNames = compose('image_%d.npy', 1:mumImages);

% Initialize cell arrays and numeric arrays (recommended, not required)
image_ = cell(size(imageNames));
image = cell(size(imageNames));
imageMAX = cell(size(imageNames));
IMAGE = cell(size(imageNames));
spot = zeros(size(imageNames));

% Populate the cell arrays and numeric arrays
for i = 1:mumImages
    image_{i} = readNPY(imageNames{i});
    image{i} = double(image_{i});
    imageMAX{i} = max(max(image{i}));

    % normalizes to the maximum
    reference = exp(-1);
    IMAGE{i} = fix(image{i}./imageMAX{i}/reference);

    % calculate the spot size
    spot(i) = 2*sqrt(size(nonzeros(IMAGE{i}),1)/pi)/1000;

end

% plot the spot size
plot(1:mumImages, spot)

Вариант 2 - использование массива stuct: Вы можете сделать то же, что и выше, с массивом stuct

% Number of image files
mumImages = 112;

% Genrate image file names with desired format
imageNames = compose('image_%d.npy', 1:mumImages);

% Initialize a struct with desired fields (recommended, not required)
C = repmat(struct('image_',[], 'image', [], 'imageMAX', [], 'IMAGE', [], 'spot', []), mumImages, 1 );

% Populate the struct array fields
for i = 1:mumImages
    C(i).image_ = readNPY(imageNames{i});
    C(i).image = double(C(i).image_);
    C(i).imageMAX = max(max(C(i).image));

    % normalizes to the maximum
    reference = exp(-1);
    C(i).IMAGE = fix(C(i).image./C(i).imageMAX/reference);

    % calculate the spot size
    C(i).spot = 2*sqrt(size(nonzeros(C(i).IMAGE),1)/pi)/1000;

end

% plot the spot size
plot(1:mumImages, [C.spot])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...