Как открыть TXT-файл ИК температур в виде изображения в Matlab или другом программном обеспечении для анализа - PullRequest
1 голос
/ 21 июня 2019

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

Программное обеспечение, поставляемое с камерой, не позволяет рисовать полигоны, поэтому я хотел бы загрузить изображение в другую программу, такую ​​как MATLAB или, возможно, imageJ (также с удовольствием использую Python или другую, если это будет работать).

Камера создает всего 4 файла:

У меня есть файл .jpg, однако, когда я открываю его в MATLAB, он просто выглядит как изображение, и я думаю, что он просто открывается как обычное изображение, не зная, как точно определить температуру из этого. Я использовал следующее, чтобы открыть его:

im=imread('C:\18. Bats\20190321_064039.jpg');
imshow(im);

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

В текстовом файле отображается температура каждого пикселя изображения.

например. (для фотографии с минимальной температурой 15 градусов и максимумом 20 градусов это будет текстовый файл с минимальным значением 1500 и максимальным значением 2000)

1516 1530 1530 1540 1600 1600 1600 1600 1536 1536 ........

Этот файл выглядит очень полезным, просто интересно, есть ли какой-нибудь способ, которым я могу открыть это как изображение, вероятно, в программе, такой как MATLAB, которая, я думаю, имеет анализ изображения, чтобы я мог рисовать вокруг определенных частей изображения (например, крыло летучей мыши) и найти среднее, максимальное, минимальное и т. д. Кто-нибудь имел опыт работы с подобными вещами, могу ли я как-то назначить цвета цифрам? Или, возможно, другие люди уже сделали это, и есть гораздо более простой способ. Я буду продолжать поиск в Интернете и постараюсь выяснить.

В качестве альтернативы, возможно, мне нужно открыть изображение .jpg, нарисовать вокруг разных частей, написать программу, чтобы узнать, какие пиксели я нарисовал, найти их в текстовом файле, а затем выполнить усреднение и т. Д.? Или каким-либо образом связать значения в текстовом файле с файлом .jpg.

Извините, если это неправильное место, чтобы спросить, я не могу найти сайт обработки изображений на стеке обмена.

Вся помощь очень ценится, тем временем я продолжу поиск в интернете.

1 Ответ

1 голос
/ 23 июня 2019

следующее сработало, в конце концов, это было намного проще, чем я думал. Теперь я большой поклонник MATLAB, я думал, что это может занять несколько дней.

Просто вставьте сюда на случай, если это пригодится кому-то еще. Я уверен, что есть более элегантный способ написания кода, однако я впервые использую MATLAB за 20 лет: p Используйте на свой страх и риск, я не дважды проверил, получаю ли я правильные результаты пока (хотя сделаю, прежде чем использовать его для чего-то важного).

  • edit, с момента написания этой статьи я обнаружил, что выходной .txt-файл температур на самом деле является температурой датчика, которую необходимо скорректировать на коэффициент излучения и фоновую температуру, чтобы получить заданные температуры. (Один из способов сделать это - использовать программное обеспечение, поставляемое бесплатно с камерой, для создания новых выходных .csv файлов температур и использовать их вместо этого).

Спасибо Бла, который поставил меня на правильный путь с помощью dlmread.

M=dlmread('C:\18. Bats\20190321_064039\20190321_064039_temps.txt')  % read in the text file as a matrix (call it M)
                          % note that file seems to be a list of temperature values for each pixel 
                          % e.g. 1934 1935 1935 1960 2000 2199... 
M = rot90( M , 1 )  % rotate M anti-clockwise by 1*90  (All the pictures were saved sideways for some reason so rotate for easier viewing)
a = min(M(:));      % find the minimum temperature in the image
b = max(M(:));      % find the maximum temperature in the image
imresize(M,1.64);   % resize the image to fit the computer screen prior to showing it on the screen

imshow(M,[a b]);    % show image on the screen and fit the colours so that white is the value with the highest temperature in the image (b) and black is the lowest (a).

h = drawpolygon('FaceAlpha',0);     % Let the user draw a polygon around the region of interest (ROI) 
                                %(this stops code until polygon is drawn)

maskOfROI = h.createMask();         % For each pixel in the image assign a binary number, pixels inside the polygon (ROI) area are given 1 outside are 0
selectedValues = M(maskOfROI);      % Now get the image values for all pixels where the mask value is '1' (i.e. all pixels within the polygon) and call this selectedValues.


averageTemperature = mean(selectedValues);     % Get the mean of selectedValues (i.e. mean of the temperatures inside the polygon area)
maxTemperature = max(selectedValues);          % Get the max of selectedValues
minTemperature = min(selectedValues);          % Get the min of selectedValues
...