Tôi muốn vẽ một đường thẳng từ một điểm được xác định tới điểm khác và sau đó biến nó thành ma trận hình ảnh để sử dụng bộ lọc Gaussian trên nó để làm mịn. Đối với điều này tôi sử dụng các chức năng line
và getframe
để vẽ một đường thẳng và chụp cửa sổ hình trong một hình ảnh, nhưng getframe
là rất chậm và không đáng tin cậy lắm. Tôi nhận thấy rằng nó không nắm bắt bất cứ điều gì khi máy tính bị khóa và tôi nhận được một lỗi out of memory
sau 170 lần thực thi.Làm cách nào để tạo ma trận hình ảnh với một đường kẻ được vẽ trong MATLAB?
Câu hỏi của tôi là:
- Có một thay thế để
getframe
mà tôi có thể sử dụng không? - Có cách nào để tạo ma trận hình ảnh và vẽ đường trực tiếp trong đó không?
Đây là một mẫu mã tối thiểu:
figure1=line([30 35] ,[200 60]);
F= getframe;
hsize=40; sigma=20;
h = fspecial('gaussian',hsize,sigma);
filteredImg = imfilter(double(F.cdata), h,256);
imshow(uint8(filteredImg));
[cập nhật]
hiệu suất cao ý tưởng của Mark với linspace
trông rất hứa hẹn, nhưng làm thế nào để truy cập vào ma trận tọa độ tính toán với linspace
? Tôi đã thử đoạn mã sau, nhưng nó không hoạt động như tôi nghĩ. Tôi cho rằng đó là một điều MATLAB rất đơn giản và cơ bản, nhưng tôi chỉ không thể quấn quanh đầu tôi nó:
matrix=zeros(200,60);
diagonal=round([linspace(30,200,numSteps); linspace(35,60,numSteps)]);
matrix(diagonal(1,:), diagonal(2,:))=1;
imshow(matrix);
Vì vậy, những gì bạn đang làm là rasterisation của một hình ảnh vector. Rất nhiều tài liệu tham khảo tốt về chủ đề này, Wikipedia, như mọi khi, là một nơi tốt để bắt đầu. –
Tôi biết, nhưng tôi luôn cố gắng sử dụng các chức năng riêng của Matlab. Tôi không học nhiều, nhưng chúng nhanh hơn và tôi không phải tốn thời gian để gỡ lỗi chúng như mã của riêng tôi. – Framester