calibration in image analysis

2 ビュー (過去 30 日間)
Chaitanya kumar reddy
Chaitanya kumar reddy 2022 年 10 月 4 日
回答済み: Udit06 2023 年 9 月 29 日
find (BW==1);
[m,n]= find (BW==1);
pos = [m';n'];
D = zeros(1,448)
for i = 1:length(m)
i
D(i,:) = [calibrated_data(m(i),n(i),:)]
end
i have used the above code for calibration but the dataset has 398656 elements and it is taking so long to calibrate like more than 1hr. is there any faster way for calibration??
  2 件のコメント
Benjamin Thompson
Benjamin Thompson 2022 年 10 月 4 日
Can you provide more information about what you are calibrating, and maybe a small sample image? What is the problem?
Chaitanya kumar reddy
Chaitanya kumar reddy 2022 年 10 月 4 日
clc
clear all
close all
dataset_name = ['20220118_test_Normalbreast_061722_1_left_2022-06-17_19-28-26'];
raw_data_headfile = strcat('D:\HSI_data\', dataset_name, '\capture\', dataset_name, '.hdr');
raw_data_datafile = strcat('D:\HSI_data\', dataset_name, '\capture\', dataset_name, '.raw');
dark_ref_headfile = strcat('D:\HSI_data\', dataset_name, '\capture\DARKREF_', dataset_name, '.hdr');
dark_ref_datafile = strcat('D:\HSI_data\', dataset_name, '\capture\DARKREF_', dataset_name, '.raw');
white_ref_headfile = strcat('D:\HSI_data\', dataset_name, '\capture\WHITEREF_', dataset_name, '.hdr');
white_ref_datafile = strcat('D:\HSI_data\', dataset_name, '\capture\WHITEREF_', dataset_name, '.raw');
raw_info = enviinfo(raw_data_headfile);
raw_data = multibandread(raw_data_datafile,[raw_info.Height, raw_info.Width, raw_info.Bands],...
raw_info.DataType, raw_info.HeaderOffset, raw_info.Interleave, raw_info.ByteOrder);
dark_info = enviinfo(dark_ref_headfile);
dark_data = multibandread(dark_ref_datafile, [dark_info.Height, dark_info.Width, dark_info.Bands],...
dark_info.DataType, dark_info.HeaderOffset, dark_info.Interleave, dark_info.ByteOrder);
dark_data_avg = mean(dark_data, 1);
white_info = enviinfo(white_ref_headfile);
white_data = multibandread(white_ref_datafile, [white_info.Height, white_info.Width, white_info.Bands],...
white_info.DataType, white_info.HeaderOffset, white_info.Interleave, white_info.ByteOrder);
white_data_avg = mean(white_data, 1);
calibrated_data = raw_data;
for i = 1:size(raw_data, 1)
calibrated_data(i, :, :) = (calibrated_data(i, :, :) - dark_data_avg)./ (white_data_avg - dark_data_avg);
end
rice_dot = calibrated_data(238, 460, :);
background_dot = calibrated_data(323, 658, :);
plot(raw_info.Wavelength, rice_dot(:))
hold on
plot(raw_info.Wavelength, background_dot(:))
legend('grape', 'background')
A = imread('D:\HSI_data\20220118_test_Normalbreast_061722_1_left_2022-06-17_19-28-26\20220118_test_Normalbreast_061722_1_left_2022-06-17_19-28-26.png');
imshow(A)
B = rgb2gray(A);
level = graythresh(B);
BW = im2bw(B,level);
find (BW==1);
[m,n]= find (BW==1);
pos = [m';n'];
D = zeros(1,448)
%D = cell([1 2]);
for i = 1:length(m)
D(i,:) = [calibrated_data(m(i),n(i),:)];
end
% E = mean(D);
% plot(raw_info.Wavelength,E)
% figure
% imshow(BW);
%
%
% % D = calibrated_data(70,275,:);
% % E = reshape(D,[1,448]);

サインインしてコメントする。

回答 (1 件)

Udit06
Udit06 2023 年 9 月 29 日
Hi Chaitanya,
I understand that the code that you have written for calibration is taking a long time to run. You can utilize the following features supported by MATLAB to make your code run faster.
1) Vectorization: Instead of using a loop to iterate over each element, try to use vectorized operations whenever possible. MATLAB is optimized for array operations, and using vectorization can significantly speed up the computation.
2) Parallel Computing: Consider using parallel computing techniques like MATLAB's "parfor" to distribute the workload across multiple workers.
You can refer to the below MathWorks documentations to understand more about vectorization and “parfor” respectively.
I hope this helps.

カテゴリ

Help Center および File ExchangeSignal Generation and Preprocessing についてさらに検索

タグ

製品


リリース

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by