Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ перевод отрицательных чисел в строку http://www.cyberforum.ru/cpp-beginners/thread743276.html
мне нужно,что бы и отрицательные числа переводились,помогите кто чем может вот что у меня получилось для положительных,все прекрасно работает #include <iostream> #include <windows.h> using...
C++ 3D Render Здравствуйте! В университете дали задание: использовать win32 с++ для того чтобы отрендерить треугольники, которые импортируется в программу через iostream. Всякие матрицы, точки и так далее. И... http://www.cyberforum.ru/cpp-beginners/thread743274.html
C++ Перевести к-ичное число Ак в g-ичную систему счисления зы 102213, g = 9
Перевести к-ичное число Ак в g-ичную систему счисления зы 102213, g = 9
Передача строки в функцию system C++
можно ли каким либо образом передать system значение String допустим есть string c="primer"; system(c); чтобы system принял значение system("prmer");
C++ Проблемы с компиляцией http://www.cyberforum.ru/cpp-beginners/thread743221.html
Посмотрите пожалуйста, при компиляции получается пустая форма. Подскажите, что не так? Программа во вложении.
C++ Составьте функцию, изменяющую одномерный массив целых чисел следующим обра-зом: Составьте функцию, изменяющую одномерный массив целых чисел следующим обра-зом: к значению каждого положительного элемента прибавляется его индекс. Исполь-зуя эту функцию, определите, в каком из двух... подробнее

Показать сообщение отдельно
Кукарача
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 9

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

23.12.2012, 16:28. Просмотров 1200. Ответов 7
Метки (Все метки)

Привет, дано матрицу, каждый елемент которой -значение интенсивности пикселя изображения. Размер матрицы задается, заполняеться случайными числами(до 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;

   }
  }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru