Info
This question is locked. 请重新打开它进行编辑或回答。
How to incorporate scatter function so that the lines of the image don't print on top of one another
2 次查看(过去 30 天)
显示 更早的评论
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');
2 个评论
Image Analyst
2024-6-29
If you have any more questions, then attach your data ('C:\Users\devineh\Chest_XRay_Raw_Data.txt') with the paperclip icon after you read this:
回答(1 个)
Walter Roberson
2024-6-28
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 个评论
Walter Roberson
2024-6-29
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!