Применение порога к изображению - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь написать функцию, которая порождает изображение уровня серого F и пороговое значение t (0 ≤ t ≤ 255), такое, что r = 0 для r < t и r = 255 в противном случае.

Я пытался реализовать это, но imshow(r) не выводит.

function f = imgThreshold(img, t)

f = img;

if (f < t)
    f = 0;
else
    f = 1;
end

img = imread('https://i.stack.imgur.com/kP0u2.png');
t = 20; 
r = imgThreshold(img, t);
imshow(r); 

Это должно пороговое значение этого изображения.Однако это не так.Что я делаю не так?

1 Ответ

0 голосов
/ 06 февраля 2019

Лучше всего было бы использовать логическое индексирование :

f(f<t)=0; % set all elements of f<t to 0
f(~(f==0))=1; % Set all elements where f is not 0 (i.e. the rest) to 1

f<t красиво создает логическую матрицу, соответствующую условию, но впоследствии вы либо f=1, либо f=0, что означает, что вы устанавливаете для f значение скаляр (один или ноль), которое, конечно, просто отображает черный или белый квадрат.Вместо этого используйте логическую матрицу в качестве операции индексации в самой матрице, а затем присваивайте нужное значение каждой записи true, как описано выше.

Также определение function либо идет в своем собственном файле, либо включенонижняя часть сценария.Таким образом, либо вы сохраняете функцию как imgThreshold.m и оставляете остальное для сценария, либо сначала вызываете сценарий и ставите function f = imgThreshold(img, t) и т. Д. После вызова imshow

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...