Вашего второй if
оператор использует переменный доступ kx
и ky
.... Я предполагаю, что вы хотите использовать i
и j
:
out(i,j)=temp.^0.5;
Вы также должны убедитесь, что интенсивность это двойная точность для работы квадратного корня. Поэтому убедитесь, что интенсивность, считанная в каждом местоположении, отлита до double
, а затем, если вы закончите, вернитесь к uint8
. На самом деле, сделайте конверсию после, вы просматриваете все изображение.
for i=1:N
for j=1:N
temp=double(a(i,j)); % Change
if temp>0&temp<120
out(i,j)=temp.^2;
end
if temp>120&temp<=255
out(i,j)=temp.^0.5; % Change
end
end
end
out = uint8(out); % Change
kx
и ky
были установлены где-то в вашем коде и никогда не меняется, так что это означает, что, если и когда вторая if
утверждение не произойдет, установка гаммы происходит только в одном месте определяется только в kx
и ky
. Мой совет вам должен был написать фактическую функцию , чтобы вы не перекрестно загрязняли переменные в разных рабочих областях. Включив это в функцию, вы сразу сообщите вам, что kx
и ky
не определены.
BTW, я бы предпочел, чтобы вы делали это более эффективно без петель. Вы можете легко выполнить те же операции, что и векторы. Однако для этого требуется преобразовать изображение в double
, поскольку тип по умолчанию - uint8
для изображения Оператора. Поэтому использовать double
для преобразования изображения в double
, делать гамма-коррекцию, а затем преобразовать обратно с помощью uint8
:
a = double(imread('cameraman.tif'));
out = zeros(size(a));
out(a > 0 & a < 120) = a(a > 0 & a < 120).^2;
out(a >= 120 & a <= 255) = a((a >= 120 & a <= 255).^0.5;
out = uint8(out);
Первая и вторая строка кода, конечно, знакомы. Третья строка кода находит маску logical
, где мы ищем интенсивности между 0 и 120 эксклюзивными. Как только мы найдем эти значения, мы используем одну и ту же логическую маску для индексации в исходное изображение и получаем только те значения, квадрат каждого значения и устанавливаем их в одинаковых пространственных местоположениях на выходе. То же самое можно сказать и о последней строке кода, где вы ищете от 120 до 255, но вместо этого вы берете квадратный корень. Наконец, мы преобразуем в uint8
для отображения.
И, поскольку я уверен, что вы редактируете прямо сейчас, лучше сделать векторизованное :-) –
Ха-ха, eccolo qua –
@LuisMendo: D: D: D lol ... ждет, пока другая обувь не упадет, а? – rayryeng