Info
This question is locked. Rouvrir pour modifier ou répondre.
Not getting a full image from raw data
15 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I am trying to make an Xray image using x, y, and z coordinates of raw data. Here is what I have:
data = readmatrix('Chest_XRay_Raw_Data.txt');
% Extract x, y, z coordinates and grayscale values
x = data(:,1);
y = data(:,2);
z = data(:,3); % If needed, otherwise ignore
grayscale = data(:,4);
%Find bounds
x_range = min(x):max(x);
y_range = min(y):max(y);
% Initialize the image matrix
image = zeros(length(y_range), length(x_range));
% Populate the image matrix with grayscale values
for i = 1:length(x)
x_idx = find(x_range == x(i));
y_idx = find(y_range == y(i));
image(y_idx, x_idx) = grayscale(i);
end
%normalize image
image = mat2gray(image);
% Display the image
imshow(image);
title('Reconstructed Image from Raw Data');
Raw data example:
+4.23789300E+002, +0.00000000E+000, +0.00000000E+000, +420
+4.23619400E+002, +0.00000000E+000, +0.00000000E+000, +420
+4.23449400E+002, +0.00000000E+000, +0.00000000E+000, +420
+4.23279500E+002, +0.00000000E+000, +0.00000000E+000, +420
+4.23109600E+002, +0.00000000E+000, +0.00000000E+000, +420
+4.22939700E+002, +0.00000000E+000, +0.00000000E+000, +420
+4.22769700E+002, +0.00000000E+000, +0.00000000E+000, +420
+4.22599800E+002, +0.00000000E+000, +0.00000000E+000, +420
+4.22429900E+002, +0.00000000E+000, +0.00000000E+000, +420
An image window pops up with only one solid line with a little blank space in the middle. Any suggestions to fix this?
3 commentaires
Réponses (1)
Walter Roberson
le 25 Juin 2024
x_range = min(x):max(x);
y_range = min(y):max(y);
That code assumes that most of the x and y are integers (or at least integers plus a constant offset).
+4.23789300E+002, +0.00000000E+000, +0.00000000E+000, +420
+4.23619400E+002, +0.00000000E+000, +0.00000000E+000, +420
+4.23789300E+002 is not an integer. +4.23619400E+002 is not an integer either -- and it is not the same constant offset relative to the other non-integer.
1 commentaire
Walter Roberson
le 26 Juin 2024
is there a command o fix this?
Not without a lot of assumptions.
You would need to find the common divisor between the differences in values, and scale everything by that common divisor.
format long g
A = [+4.23789300E+002, +0.00000000E+000, +0.00000000E+000, +420
+4.23619400E+002, +0.00000000E+000, +0.00000000E+000, +420
+4.23449400E+002, +0.00000000E+000, +0.00000000E+000, +420
+4.23279500E+002, +0.00000000E+000, +0.00000000E+000, +420
+4.23109600E+002, +0.00000000E+000, +0.00000000E+000, +420
+4.22939700E+002, +0.00000000E+000, +0.00000000E+000, +420
+4.22769700E+002, +0.00000000E+000, +0.00000000E+000, +420
+4.22599800E+002, +0.00000000E+000, +0.00000000E+000, +420
+4.22429900E+002, +0.00000000E+000, +0.00000000E+000, +420];
udA = unique(diff(sort(A(:,1))))
you would have to scale by something that divides each of those.
Unless you are willing to round to the nearest 0.17...
RA = round(A(:,1)/0.17)
take the max() and min() of urA as the range of values,
[minRA, maxRA] = bounds(RA);
sRA = RA - minRA + 1
This question is locked.
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!