Форум программистов, компьютерный форум CyberForum.ru

Оператор Собеля для каждого елемента матрицы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ перевод отрицательных чисел в строку http://www.cyberforum.ru/cpp-beginners/thread743276.html
мне нужно,что бы и отрицательные числа переводились,помогите кто чем может вот что у меня получилось для положительных,все прекрасно работает #include <iostream> #include <windows.h> using namespace std; char*Rus(const char* text); int num_to_str(int n) { char s="", s1="",s2=""; if ((n>=100) && (n<1000))
C++ 3D Render Здравствуйте! В университете дали задание: использовать win32 с++ для того чтобы отрендерить треугольники, которые импортируется в программу через iostream. Всякие матрицы, точки и так далее. И таким образом, программа конвертирует 3D изображение на ее проекцию в 2D. Все бы ничего, да только вот компьютер жестоко подгружается при старте компилятора, да и иногда вылезает exception error при... http://www.cyberforum.ru/cpp-beginners/thread743274.html
C++ Перевести к-ичное число Ак в g-ичную систему счисления зы 102213, g = 9
Перевести к-ичное число Ак в g-ичную систему счисления зы 102213, g = 9
C++/CLI Кириллица в консольном приложении
Порекомендуйте способ но с условиями: кроме CharToOem() и Oem-подобных функций. setlocale() же выводит кириллицу на ура, но вот с вводом кириллицы в символьные переменные у него проблема. SetConsoleCP() и SetConsoleOutputCP() отлично выводит и вводит кириллицу, но они работают только со шрифтами Lucida Console и Consolas командной строки, но не работают с точечными шрифтами...
C++ Передача строки в функцию system http://www.cyberforum.ru/cpp-beginners/thread743233.html
можно ли каким либо образом передать system значение String допустим есть string c="primer"; system(c); чтобы system принял значение system("prmer");
C++ Проблемы с компиляцией Посмотрите пожалуйста, при компиляции получается пустая форма. Подскажите, что не так? Программа во вложении. подробнее

Показать сообщение отдельно
Кукарача
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 9
23.12.2012, 16:28     Оператор Собеля для каждого елемента матрицы
Привет, дано матрицу, каждый елемент которой -значение интенсивности пикселя изображения. Размер матрицы задается, заполняеться случайными числами(до 255) , и для каждого елемента нужно высчитать оператор Собеля-G[i][j]. В нем есть горизонтальная(Gx) и вертикальная(Gy) слагаемые.

Gx[i][j]= mas[i-1][j-1] + 2*mas[i-1][j] + mas[i-1][j+1] – mas[i+1][j-1] – 2*mas[i+1][j] - mas[i+1][j+1].
Gy[i][j]= mas[i-1][j-1] + 2*mas[i][j-1] + mas[i+1][j-1] – mas[i-1][j+1] – 2*mas[i][j+1] - mas[i+1][j+1].

A G[i][j]- корень из суммы их квадратов.
Операторы для каждого елемента нужно вывести ввиде соответствующей матрицы.
Если i=0, допустим, то [i-1] = последнему елементу, если i = n-1, то [i+1] = [0] и т.д.

Вот код,моя рандомная матрица выводиться,а дальше программа вылетает
Код
#include <iostream>
#include <ctime>
#include <conio.h>
#include <stdlib.h>
#include <math.h>

using namespace std;

void MatrixOut(int **MATRIX, int COLUMNS, int ROWS);
int SobelGradient(int **matrix, int COLUMNS, int ROWS);

int main()
{
   int columns, rows;

   cout << "Input the size of matrix\n";
   cin >> columns >> rows;


   int **matrix=new int *[columns];
   for(int i=0; i<columns; i++){
    matrix[i]= new int [rows];
   }


   srand(time(0));
   for(int i=0; i<columns; i++){
    for(int u=0; u<rows; u++){
     matrix[i][u]=rand()%255 +1;
    }
   }

  MatrixOut (matrix, columns, rows);
  SobelGradient(matrix, columns, rows);
}


 void MatrixOut(int **MATRIX, int COLUMNS, int ROWS){
  for (int y=0; y<ROWS; y++) {
   for (int x=0; x<COLUMNS; x++) {
    cout << MATRIX[y][x] << "\t";
   }
  cout << endl;
  }
}


int SobelGradient(int **matrix, int COLUMNS, int ROWS){

  int Gx, Gy, G;
  for(int i=0; i<COLUMNS; i++){
   for (int j=0; j<ROWS; j++){

    if(i=0){matrix[i-1][j-1]=matrix[COLUMNS-1][j-1];
            matrix[i-1][j+1]=matrix[COLUMNS-1][j+1];
            matrix[i-1][j]=matrix[COLUMNS-1][j];
           }
    if(i=COLUMNS-1){matrix[i+1][j-1]=matrix[0][j-1];
                    matrix[i+1][j+1]=matrix[0][j+1];
                    matrix[i+1][j]=matrix[0][j];
                   }
    if(j=0){matrix[i-1][j-1]=matrix[i-1][ROWS-1];
            matrix[i+1][j-1]=matrix[i+1][ROWS-1];
            matrix[i][j-1]=matrix[i][ROWS-1];
           }
    if(j=ROWS-1){matrix[i-1][j+1]=matrix[i-1][0];
                 matrix[i+1][j+1]=matrix[i+1][0];
                 matrix[i][j+1]=matrix[i][0];
                }
    Gy=matrix[i-1][j-1] +2*matrix[i][j-1] +matrix[i+1][j-1] -matrix[i-1][j+1] -2*matrix[i][j+1] -matrix[i+1][j+1];
    Gx=matrix[i-1][j-1] +2*matrix[i-1][j] +matrix[i-1][j+1] -matrix[i+1][j-1] -2*matrix[i+1][j] -matrix[i+1][j+1];
    G=sqrt(pow(Gy,2)+pow(Gx,2));
    cout << G << "\t";
   }
   cout << endl;

   }
  }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru