2016-03-06 3 views
2

Я хочу установить значения в строке, конечные точки которой возвращаются hough, преобразуются в ноль. Я написал следующий фрагмент кодаИзменение значений пикселей в строке в MATLAB

imshow(img); 
hold on 
img_black = img; 

for k = 1:length(lines) 

    xy = [lines(k).point1; lines(k).point2]; %line end points 
    [x, y] = bresenham(xy(1,1),xy(1,2),xy(2,1),xy(2,2)); %returns all points on the line 

    for i = 1:length(x) 
     plot(x(i),y(i),'*'); %to plot individual pixels on line itself 
     img_black(x(i),y(i),:) = [0,0,0]; %set rgb values to zero 
    end 
end 

Хотя точки, нанесенные на изображении ниже, как и следовало ожидать

Изображение, где соответствующие значения пикселей в настоящее время установлены в ноль не как ожидалось.

enter image description here

Что здесь происходит?

ответ

4

Похоже, вы перепутали x и y со строками и колоннами.

img_black(x(i), y(i),:) 

Должно быть

img_black(y(i), x(i),:); 

Это потому, что первое измерение img_black это строки (у), а второе измерение столбцов (х).

Полученное изображение выглядит так, потому что ваши линии идут не так, и (иногда) выходят за пределы исходного изображения, но MATLAB с радостью расширяет ваше изображение (с нулями) и задает значения, которые вы запрашиваете, следовательно все черные пиксели справа.

ПРИМЕЧАНИЕ. Это переключение между строками, столбцами и x, y является общим для встроенных функций MATLAB, и вы всегда должны быть осторожны, чтобы отметить, что такое выход. Пример класса: meshgrid vs ndgrid выходы.

+0

спасибо. Наверное, я запутался, поскольку сюжет принимает аргументы в обратном порядке. Поскольку график (x (i), y (i)) работал, я думал, поэтому img (x (i), y (i)). – Harjatin

+1

@HARJATINSINGH Yup! Это именно то, о чем я говорю. Это общая точка смятения. Надеюсь, это сработает для вас. – Suever