Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/14: Рейтинг темы: голосов - 14, средняя оценка - 4.93
117 / 83 / 39
Регистрация: 06.01.2013
Сообщений: 274

Как определить по изображению направление шероховатости и повернуть его на этот же угол

10.05.2019, 16:15. Показов 2720. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли определить по изображению направление шероховатости и повернуть его на этот угол средствами матлаб?

Matlab M
1
2
3
I = imread('PL_847_AR_R_03.jpg');
I_rot = imrotate(I,44);
imshow(I_rot)
Миниатюры
Как определить по изображению направление шероховатости и повернуть его на этот же угол  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.05.2019, 16:15
Ответы с готовыми решениями:

Добавить шум к одной из цветовых составляющих рисунка,повернуть его на заданный угол (90, 180, 270)
С поворотами на заданный угол я вроде бы справился,а вот как добавить шум к одной из цветовых составляющих не знаю:(

Определить работу, которую надо выполнить, чтобы повернуть рамку на угол альфа
Квадратная рамка с длиной стороны а = 0,3 м и током силой I = 8 А свободно подвешена в однородном магнитном поле с индукцией В = 0,5 Тл....

Как определить направление воздушного потока процессорного кулера, до его покупки?
Прошу прощения, если вопрос уже был когда-то задан. Как можно понять, будет ли воздух дуть в заднюю стенку корпуса или в вверх, ...

14
 Аватар для nuHrBuH
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
10.05.2019, 23:26
Лучший ответ Сообщение было отмечено Сергей Тетьора как решение

Решение

Можно вручную рисовать линию и определять угол:
Matlab M
1
2
3
4
5
6
7
h = imline;
xy = h.getPosition;
x = xy(:,1);
y = xy(:,2);
a = atand(diff(y)/diff(x));
I_rot = imrotate(I,a);
imshow(I_rot)
Или такой вариант:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
clc,clear
I = imread('PL_847_AR_R_03.jpg');
I1 = edge(rgb2gray(I));             % берем только границы областей
I2 = bwareaopen(I1,200);            % группы пикселей имеющие меньше 200 писклей вытераем
[L, n] = bwlabel(I2);               % нумеруем группы
a = zeros(n,1);
for i = 1:n
    [y,x] = find(L==i);             % пиксели группы
        % находим угол линии по первому и последнему пикселю
    a(i) = atand( (y(end)-y(1))/(x(end)-x(1)) );
end
a1 = mean(a);                       % средний угол всех линий
Ir = imrotate(I,a1);
subplot(121)
imshow(I2)
title('Группы пикселей');
subplot(122)
imshow(Ir)
title('Обработанное изображение');
1
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
11.05.2019, 18:57
Причем тут матлаб?
Матлаб одна из прог для игры с математикой и ничего больше.

Может освещать точечным источником света а не рассеянным, тогда по идее за счет анизотропии отражения будет узкая полоса света вдоль штриховки обработки. Дальше по порогу яркости черно белого растра оставить только эту полосу и играть с ней разными методами…найти центр, найти угол.
Наверно будет типа “найти угол эллипса по фото” OpenCV и т.п…
0
 Аватар для nuHrBuH
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
11.05.2019, 20:10
А можно и в Ексель макро накидать

Код Excel VBA для счита пикселей изображения (Не проверял, взят ОТСЮДА)
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub Transfer()
Dim lPixelColor, tPt As POINTAPI, tPicSize As Size, i, j, im, jm
tPt.x = 23
tPt.y = 12
lPixelColor = GetPixelColorFromShape(Plan6.Shapes("Picture 12"), tPt, tPicSize)
im = tPicSize.Height
jm = tPicSize.Width
Application.ScreenUpdating = False
For i = 1 To im
    For j = 1 To jm
        tPt.x = j
        tPt.y = i
        lPixelColor = GetPixelColorFromShape(Plan6.Shapes("Picture 12"), tPt, tPicSize)
        Sheets("map").Cells(i, j).Interior.Color = lPixelColor
Next j, i
Application.ScreenUpdating = True
End Sub


А если нету MS office, то можно в Turbo Pascal попробывать
0
Эксперт по электронике
 Аватар для R2D2
939 / 839 / 121
Регистрация: 23.11.2012
Сообщений: 2,488
15.05.2019, 07:52
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Причем тут матлаб?
ТС, вроде, ясно написал: "средствами матлаб". К чему тогда эти вопросы?
0
117 / 83 / 39
Регистрация: 06.01.2013
Сообщений: 274
15.05.2019, 13:18  [ТС]
nuHrBuH,
Цитата Сообщение от nuHrBuH Посмотреть сообщение
Можно вручную рисовать линию и определять угол:
Matlab M
1
2
3
4
5
6
7
h = imline;
xy = h.getPosition;
x = xy(:,1);
y = xy(:,2);
a = atand(diff(y)/diff(x));
I_rot = imrotate(I,a);
imshow(I_rot)
Этот вариант лучше работает. Так как есть изображения которые хуже освещены, второй вариант не всегда правильно определяет угол поворота.

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

в
Matlab M
1
J = imcrop(I,rect)
нужно размеры и положение задавать
0
1298 / 927 / 449
Регистрация: 21.10.2012
Сообщений: 2,604
15.05.2019, 18:34
Сергей Тетьора, может использовать
Matlab M
1
[qq, ww] = ginput(2);
вручную выберете две точки, у вас будут координаты прямоугольника, а дальше уже обрежете
0
 Аватар для nuHrBuH
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
15.05.2019, 21:40
Можно рисовать прямоугольник врукопашную:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
clc,clear
 
I = imread('img.png');
subplot(211)
imshow(I)
h = imfreehand;
subplot(212)
mask = h.createMask;
mask1 = repmat(mask,1,1,3);
I1 = I.*uint8(mask1);
imshow(I1)
Добавлено через 6 минут
Также можно использовать impoly()
0
117 / 83 / 39
Регистрация: 06.01.2013
Сообщений: 274
19.06.2019, 15:48  [ТС]
Решил таким вот образом
Matlab M
1
2
3
4
5
initialrect = drawrectangle('Position',[0,0,hight,width]);
pause
finalrect = dragrect(initialrect.Position);
I_cr = imcrop(I_rot,finalrect);
imshow(I_cr)
Теперь вопрос: как можно внизу изображение втулить известный масштаб длиной 500 µm, если такое соотношение 2.1068 µm/px?

Должно выглядеть примерно так, только желательно на белом фоне
Изображения
 
0
 Аватар для nuHrBuH
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
19.06.2019, 17:34
Нужно получить длину в пикселях, я так думаю
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
19.06.2019, 19:02
Лучший ответ Сообщение было отмечено Сергей Тетьора как решение

Решение

Вот вам еще вариант, с помощью преобразования Хью
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
clear, clc
 
img = imread('PL_847_AR_R_03.jpg');
imshow(img)
 
im = imadjust( rgb2gray(img) );
[H,theta,rho] = hough(im);
P  = houghpeaks(H,1);
rotI = imrotate(img,-theta((P(:,2))));
 
L = 500/2.1068; % масштаб
% добавляем надписи и линию
RGB = insertText(rotI,[55, 50],'500 um','FontSize',50);
RGB = insertShape(RGB, 'line', [50 150 50+L 150; 50 110 50 190; 50+L 110 50+L 190], 'LineWidth', 5,'Color','w');
figure, imshow(RGB)
Получилось не так ровно как хотелось бы, зато не надо ничего тыкать руками
Миниатюры
Как определить по изображению направление шероховатости и повернуть его на этот же угол  
2
117 / 83 / 39
Регистрация: 06.01.2013
Сообщений: 274
20.06.2019, 10:22  [ТС]
В итоге получилась такое изображение

Можно ли как-нибудь убрать эти черные углы, например, заполнить соседними пикселями или какие еще варианты могут быть?
0
 Аватар для nuHrBuH
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
20.06.2019, 11:19
Можно подрезать
Название: Untitled.png
Просмотров: 40

Размер: 45.5 Кб
0
20.06.2019, 11:20  [ТС]

Не по теме:

nuHrBuH, Ваш юмор не уместен

0
01.07.2019, 12:19  [ТС]

Не по теме:

еще актуально

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.07.2019, 12:19
Помогаю со студенческими работами здесь

Как использовать направление ЭДС и правильные формулы для тока, баланса мощностей и как повернуть прямоугольник на 30' и 130'?
В файле вложена картина предварительного интерфейса и работы программы. Расчет схемы электрических цепей я выбрал с помощью методов...

Как повернуть TImage на любой угол?
Здравствуйте. Подскажите как объект типа TImage повернуть на определенный градус (10,15,30 и т.д.) Стандартными средствами похоже нельзя ?

Как повернуть фигуру на заданный угол?
Для повороту фигуры я использую glRotatef(Z, 0,0,1);, но к большому стыду признаюсь, что понятия не имею в каких единицах измеряется Z...

Как повернуть матрицу на заданный угол ?
Здравствуйте. Мне нужно написать функцию, которая поворачивала бы изображение на заданный угол. Я нарыл в инете как получить значение...

Как повернуть текст на определенный угол?
Народ, помогите хто чем может! Нужно повернуть текст на опред. угол! Не важно на канвасе или в Labele! Причем так, чтобы как можно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru