Nếu bạn bị làm phiền bởi các trường hợp ngoại lệ của các phương pháp khác, đây là phương pháp chống đạn dẫn đến một dòng:
- có pixel luôn chạm vào nhau trong toàn bộ chiều dài của đường (pixel là 8 hàng xóm với nhau),
- mật độ của đường là không phụ thuộc vào thông số bổ sung, nhưng được xác định linh hoạt từ điểm đầu tiên.
Đầu vào (thuận tiện cho việc làm cho chức năng ra của mã này):
img
- ma trận có chứa hình ảnh,
x1
, y1
, x2
, y2
- tọa độ của các điểm kết thúc của dòng được vẽ.
Code:
% distances according to both axes
xn = abs(x2-x1);
yn = abs(y2-y1);
% interpolate against axis with greater distance between points;
% this guarantees statement in the under the first point!
if (xn > yn)
xc = x1 : sign(x2-x1) : x2;
yc = round(interp1([x1 x2], [y1 y2], xc, 'linear'));
else
yc = y1 : sign(y2-y1) : y2;
xc = round(interp1([y1 y2], [x1 x2], yc, 'linear'));
end
% 2-D indexes of line are saved in (xc, yc), and
% 1-D indexes are calculated here:
ind = sub2ind(size(img), yc, xc);
% draw line on the image (change value of '255' to one that you need)
img(ind) = 255;
Dưới đây là hình ảnh ví dụ với ba dòng vẽ trên nó: 
Điều này hoạt động hoàn hảo cho một đường chéo, nhưng có thể thêm các pixel không mong muốn cho một đường phẳng hơn. Nếu bạn không quan tâm đến các pixel bổ sung, tôi khuyên bạn nên chọn giải pháp gnovices vì nó nhanh và đơn giản. – Jonas
@ Jason: Tôi đã cập nhật thuật toán để tính toán dòng tốt hơn, loại bỏ một số pixel không cần thiết. – gnovice
Cảm ơn bạn đã cải thiện câu trả lời của tôi! – Jonas