Matrix darstellen in Qt
-
Hallo zusammen,
habe ein Bild das 512512 groß ist und möchte die Grauwerte ausgeben.
Ich bekomme nur die erste Zeile angegeben, was auch an Grauwert richtig ist.
Ich möchte aber, dass die Grauwerte in einer Matrix 512512 angegeben wird und alle, nicht nur die erste Zeile.
Kann jemand helfen????Hier mein Code:
Mainwindow.cpp:
[code]
#include "mainwindow.h"
#include "ui_mainwindow.h"
.........
#include <QVector>
#include <QMatrix>.....
void MainWindow::drawDICOMImg(std::string fileDICOM)
{
// Read all the Dicom files
vtkSmartPointer<vtkDICOMImageReader> bild =
vtkSmartPointer<vtkDICOMImageReader>::New();
bild->SetFileName(fileDICOM.c_str());
//Set the origin of the data (location of first pixel in the file)
bild->SetDataOrigin(0.0,0.0,0.0);
bild->Update();
int wide=bild->GetWidth();
int height=bild->GetHeight();
qDebug()<< "Patienten Name:"<<bild->GetPatientName();
qDebug()<< "Dimension des Bildes:"<<bild->GetFileDimensionality();
qDebug()<< "Gantrywinkel:"<<bild->GetGantryAngle();
qDebug()<< "Transfersyntax:"<<bild->GetTransferSyntaxUID();vtkSmartPointer<vtkImageData> imgData =
vtkSmartPointer<vtkImageData>::New();
imgData->SetDimensions(wide,height,1);
imgData->SetScalarTypeToUnsignedChar();
imgData->SetNumberOfScalarComponents(4);
imgData->AllocateScalars();
imgData->DeepCopy(bild->GetOutput());// Korrigieren/anpassen der Grauwerte damit mit Matlab identisch wird, den Faktor 1200 dazu addieren
// QVector <int> feld;
for (int i = 0; i < wide; i++) {
// for (int j =0; j < height; j++){
qDebug() << imgData->GetScalarComponentAsDouble(i, 0, 0, 0) + 1200;
// qDebug() << imgData->GetScalarComponentAsDouble(i, j, 0, 0) + 1200;// feld.append(imgData);
// qDebug()<<feld;
// QVector <QMatrix> matrix;
// for (int i=0; i<wide;i++)
// {
// QMatrix temp;
// matrix.append(temp);
// qDebug()<<matrix;
// }}
[code]Wäre sehr dankbar wenn da jemand helfen könnte, bin am ausrasten, kann doch nicht so schwer sein????
-
Was ist das für komischer Code?
-
Hallo,
sorry bin neue auf der Seite, wollte den kompletten Code nicht einfügen, sondern einen Ausschnitt davon.
Es geht da drum, das ich Dicombilder habe, diese einlese und die Grauwerte in einer Matrix auf der Konsole ausgeben will.
Ich kriege leider nur die erste Zeile auf die Reihe.Meine Frage ist, ob ich die Werte (die Grauwerte) in einer Matrix ausgeben kann und wie der dazu gehörige Code aussieht???
mein Mainwindow.cpp sieht folgenderMaßen aus (Ausschnitt):
#include "mainwindow.h" #include "ui_mainwindow.h" #include <vtkSmartPointer.h> #include <vtkImageViewer2.h> #include <vtkDICOMImageReader.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkRenderer.h> #include <QVTKWidget.h> #include <QFileDialog> #include <vtkImageData.h> #include <QVector> #include <QMatrix> .......... .......... void MainWindow::drawDICOMImg(std::string fileDICOM) { // Read all the Dicom files vtkSmartPointer<vtkDICOMImageReader> bild = vtkSmartPointer<vtkDICOMImageReader>::New(); bild->SetFileName(fileDICOM.c_str()); //Set the origin of the data (location of first pixel in the file) bild->SetDataOrigin(0.0,0.0,0.0); bild->Update(); int wide=bild->GetWidth(); int height=bild->GetHeight(); vtkSmartPointer<vtkImageData> imgData = vtkSmartPointer<vtkImageData>::New(); imgData->SetDimensions(wide,height,1); imgData->SetScalarTypeToUnsignedChar(); imgData->SetNumberOfScalarComponents(4); imgData->AllocateScalars(); imgData->DeepCopy(bild->GetOutput()); // Überprüfung des Minimumwerts und des Maximumwerts!!!! double min = 100000000; double max = -10000000; for (int i = 0; i < 512; i++) { for (int j = 0; j < 512; j++) { double val = imgData->GetScalarComponentAsDouble(i, j, 0, 0); if (val < min) { min = val; } if (val > max) { max = val; } } } qDebug()<<"Minimum:"<<min <<"Maximum:"<<max; ///// Ab hier kriege ich das nicht auf die Reihe, egal was ich gemacht habe, ob in einem Vector oder eine Matrix, das funktioniert leider bei mir nicht :mad: :mad: QVector <int> feld; for (int i = 0; i < wide; i++) { for (int j =0; j < height; j++){ // qDebug() << imgData->GetScalarComponentAsDouble(i, 0, 0, 0) + 1200; qDebug() << imgData->GetScalarComponentAsDouble(i, j, 0, 0) + 1200; feld.append(imgData); // qDebug()<<feld; // QVector <QMatrix> matrix; // for (int i=0; i<wide;i++) // { // QMatrix temp; // matrix.append(temp); // qDebug()<<matrix; // } }
-
Mir ist nicht ganz klar, was du da machst. Was ist für dich eine Matrix und was glaubst du, was QMatrix ist? Ich denke doch, du willst eine Tabelle haben. Und die QMatrix beschreibt 2D Transformationen und ist eh deprecated, mittlerweile gibts QTransform.
So, was für Grauwerte willst du ausgeben? Den Wert von jedem Pixel? Dann machs dochIch hab keine Ahnung von VTK deswegen kann ich dir auch nicht sagen, ob deine Schleife sinnvoll ist. Komplett verkehrt schaut sie auf den ersten Blick zumindest nicht aus.