Я хочу метод сдвига изображения без использования встроенных функций (методов) MATLAB. Как я могу это сделать?Как отрегулировать изображение в MATLAB без использования встроенных функций?
ответ
Создайте таблицу данных местоположений X, Y каждого пикселя в изображении. Затем переместите эти точки в новые точки, умножив каждую точку на матрицу сдвига. Я не знаком с Matlab, поэтому я не могу вам помочь.
Давайте генерировать матрицу образца:
image=reshape(1:25,[5 5])
image =
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25
стричь без использования встроенной функции от Matlab, просто сделать переназначение пикселей:
for i=1:size(image,1)-1
image(i+1,:)=image(i+1,[end-i+1:end 1:end-i]);
end
image =
1 6 11 16 21
22 2 7 12 17
18 23 3 8 13
14 19 24 4 9
10 15 20 25 5
сдвигающего это по-другому, и порезы вертикально, должно быть прямым расширением этого.
Я предполагаю, что «без использования встроенных функций» означает «не использовать Image Processing Toolbox».
Используя только основные функции MATLAB, обрезку изображений можно выполнить с помощью shear matrix и функции interp2
. Матрица сдвига может использоваться для вычисления нового набора сдвиговых координат для пикселей изображения, и затем можно использовать interp2
для интерполяции значений изображения в этих новых координатах. Ниже приведен пример нанесените сдвиг х-направление, чтобы образец картинку:
img = imread('cameraman.tif'); % Read a sample grayscale image
img = double(img); % Convert the image to type double
[nRows, nCols] = size(img); % Get the image size
[x, y] = meshgrid(1:nRows, 1:nCols); % Create coordinate values for the pixels
coords = [x(:).'; y(:).']; % Collect the coordinates into one matrix
shearMatrix = [1 0.2; 0 1]; % Create a shear matrix
newCoords = shearMatrix*coords; % Apply the shear to the coordinates
newImage = interp2(img, ... % Interpolate the image values
newCoords(1, :), ... % at the new x coordinates
newCoords(2, :), ... % and the new y coordinates
'linear', ... % using linear interpolation
0); % and 0 for pixels outside the image
newImage = reshape(newImage, nRows, nCols); % Reshape the image data
newImage = uint8(newImage); % Convert the image to type uint8
И следующий рисунок показывает сдвиг применяется к изображению с помощью приведенной выше коды:
Вы можете отрегулировать направление (x или y) и величину сдвига, изменяя недиагональные члены сдвиговой матрицы. Вы также можете изменить, какой край изображения (верхний, нижний, левый или правый) удерживается фиксированным, когда сдвиг выполняется первым переворачиванием изображения в заданном направлении, выполнением интерполяции, а затем переворачиванием изображения назад. Вы можете использовать функции flipud
и fliplr
для изменения фиксированной кромки для ножей направления x и y. Вот некоторые примеры различных ножниц:.
Здесь я приведу пример, где поворот изображения может быть реализован с тремя независимыми операциями сдвига (для получения более подробной информации, пожалуйста, обратитесь к here Поступая таким образом, я хочу показать, как реализовать операцию сдвига
I = imread('cameraman.tif');
I = imresize(I,[255,255]);
delta = 20; % rotation angle
rot_I = imrotate(I,-delta);
figure; imshow(rot_I);
% 1. calculate the shearing metrix
delta = delta/180*pi;
x_shear_matrix = [ 1 -tan(delta/2);
0 1];
y_shear_matrix = [1 0;
sin(delta) 1];
whole_matrix = [cos(delta) -sin(delta);
sin(delta) cos(delta)];
disp(whole_matrix);
seperated_matrix = x_shear_matrix*y_shear_matrix*x_shear_matrix;
disp(seperated_matrix);
% 2. shear in the x-direction
sheared_img = shear_x(I,delta);
figure; imshow(sheared_img);
% 3. Shear in the y-direction
new_sheared_img = shear_y(sheared_img,delta);
figure; imshow(new_sheared_img);
% 4. shear in the x-direction
final = shear_x(new_sheared_img,delta);
figure; imshow(final,'final');
сдвиговые операции по й-направлению и у-направления заключаются в следующем:.
function new_sheared_img = shear_x(I,delta);
[row,col] = size(I);
center_x = floor(col/2);
center_y = floor(row/2);
top_right_x = col-center_x-tan(delta/2)*(1-center_y);
bottom_left_x = 1-center_x-tan(delta/2)*(row-center_y);
new_width =ceil(top_right_x-bottom_left_x+1);
center_x_new = floor(new_width/2);
center_y_new = center_y;
new_sheared_img = zeros(row,new_width);
for i= 1:row
pos_y = (i-center_y);
pos_y_img = pos_y+center_y;
pos_y_img = floor(pos_y_img+0.5);
for j=1:col
pos_x = (j-center_x)-tan(delta/2)*pos_y;
pos_x_img = pos_x-bottom_left_x+1;
pos_x_img = floor(pos_x_img+0.5);
new_sheared_img(pos_y_img,pos_x_img) = I(i,j);
end
end
function new_sheared_img = shear_y(sheared_img,delta);
[row,col] = size(sheared_img);
center_x = floor(row/2);
center_y = floor(col/2);
top_left_corner = (1-center_x)*sin(delta)+(1-center_y);
bottom_right_corner = (col-center_x)*sin(delta)+row-center_y;
new_height = ceil(bottom_right_corner-top_left_corner+1);
new_sheared_img = zeros(new_height,col);
center_x_new = center_x;
center_y_new = floor(new_height/2);
for i=1:col
pos_x = i-center_x;
pos_x_img = pos_x+center_x_new;
pos_x_img = floor(pos_x_img+0.5);
for j=1:row
pos_y = pos_x*sin(delta)+j-center_y;
pos_y_img = pos_y-top_left_corner+1;
pos_y_img = floor(pos_y_img+0.5);
new_sheared_img(pos_y_img,pos_x_img) = sheared_img(j,i);
end
end
- 1. Гистограмма цветного изображения RGB Изображения без использования встроенных функций MATLAB
- 2. Билинейная интерполяция в Matlab (без встроенных функций)
- 3. Создание диагональной матрицы без использования встроенных функций MATLAB
- 4. Как гауссовское размытие изображения без использования встроенных функций gaussian?
- 5. Применение гауссовского фильтра без использования встроенных функций MatLab
- 6. сжатие файла без использования встроенных функций
- 7. Переименование встроенных функций без использования стороннего надстройки?
- 8. Соответствие строк без использования встроенных функций
- 9. Вызов без встроенных функций от встроенных функций
- 10. Расчет размера массива без использования встроенных функций
- 11. Найти частотную характеристику встроенных функций в Matlab
- 12. Python: двоичный счет без использования встроенных функций
- 13. String palindrome без использования встроенных функций
- 14. Как реализовать приоритетную очередь без использования встроенных функций?
- 15. Как вычислить квадратный корень из числа без использования встроенных функций?
- 16. Проверьте наличие встроенных функций MATLAB в скрипте
- 17. Как повернуть изображение о оси Z в JOGL без использования встроенных функций glRotateF
- 18. Вставка Сортировка без встроенных функций
- 19. php для изменения строки без использования циклов или встроенных функций
- 20. Считать или добавить элементы списка без использования встроенных функций python
- 21. свертывание гауссовской маски на изображении без использования встроенных функций
- 22. Поиск подстроки внутри строки без использования встроенных функций
- 23. Тестирование встроенных/встроенных функций
- 24. Matlab: массив встроенных функций. Вызов одной функции
- 25. Как улучшить эффективность встроенных функций?
- 26. Несогласованное поведение встроенных функций при перегрузке встроенных функций в Octave
- 27. Как построить Локальный корень без использования специальных функций Matlab
- 28. Как вычислить матрицу ковариации без каких-либо встроенных функций или циклов в MATLAB?
- 29. Как добавить элемент в массив без каких-либо встроенных функций
- 30. Реализовать выравнивание гистограммы без встроенных функций
Ну, даже добавление и умножение являются встроенными функциями MATLAB, поэтому я утверждаю, что ваша цель невозможна. Возможно, вы должны быть готовы немного поднять эту цель. – 2010-05-12 13:31:41
Возможно, вы имеете в виду без использования инструментария для манипулирования изображениями? – Geoff