Borrar filtros
Borrar filtros

Info

This question is locked. Vuélvala a abrir para editarla o responderla.

How to incorporate scatter function so that the lines of the image don't print on top of one another

36 visualizaciones (últimos 30 días)
I have this code to take x.y,z coordinates to make an x-ray image. The lines of the image just print on top of one another. I want to use the scatter function so that the lines of the image make a full picture. How and where would I add this?
Here is my code:
data = readmatrix('C:\Users\devineh\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);
%Normalize points
x = round(x - min(x) + 1);
y = round(y - min(y) + 1);
%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');

Respuestas (1)

Walter Roberson
Walter Roberson el 28 de Jun. de 2024 a las 21:00
You are not going to be able to do what you want. Your data points are not at integer locations relative to each other; they are 0.17 apart in X.
  1 comentario
Walter Roberson
Walter Roberson el 29 de Jun. de 2024 a las 2:37
One possibility would be to use something like
N = 256;
x = data(:,1);
y = data(:,2);
grayscale = data(:,4);
[minx, maxx] = bounds(x);
[miny, maxy] = bounds(y);
binx = discretize(x, linspace(minx, maxx, N));
biny = discretize(y, linspace(miny, maxy, N));
for i = 1 : length(binx)
gray_image(binx(i), biny(i)) = grayscale(i));
end

This question is locked.

Community Treasure Hunt

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

Start Hunting!

Translated by