Filtr min,max,med

0

Witam, mam problem z programem filtru medianowego, minimalnego i maksymalnego. Ogolem jest to dosc nietypowy problem bo udalo mi sie napisac program i to nawet jak sam profesor stwierdzil "idealny informatycznie" ale nie chce mi z niego wystawic najwyzszej oceny (potrzebne mi to jest do stypendium)
. Otoz w programie tym uzylam skryptu ktory od razu przelicza piksele i wybiera dla nich w zaleznosci - najmniejsza- najwieksza badz srednia wartosc piksela. Profesor jednak chce aby bylo to wykonane za pomoca dwoch petli "for". Nie mam juz sily do tego, czy ktos moglby mi pomoc z tymi petlami? Ponizej moj program:

#include "CImg.h"
#include <iostream>

using namespace cimg_library;
using namespace std;

int main()
{
	cout << "Podaj nazwe pliku z rozszerzeniem:" << endl;
	char plik[255];
	cin >> plik;

	cout << "Podaj nr filtru:\n1 - minimalny, 2 - medianowy, 3 - maksymalny" << endl;
	int filtr;
	cin >> filtr;


	typedef unsigned char uchar;

	// obraz_wyjsciowy jest tworzony przy uzyciu konstruktora kopiujacego.
	// Oznacza to, ze obraz_wyjsciowy bedzie mial‚ takie same parametry
	// (wymiary, kolory, itd) jak obraz_wejsciowy.


	CImg<uchar> obraz_wejsciowy(plik), obraz_wyjsciowy(obraz_wejsciowy, false);
	// false powoduje, ze piksele dla obraz_wyjsciowy beda'niezalezne'

	// 'maska' o podanych wymiarach
	CImg<uchar> N(3, 3);

	if(filtr == 1)
	{
		// Z CImg - petla 'po kolorach'
		cimg_forC(obraz_wejsciowy, c)
		// Z CImg - petla 'po masce'
		cimg_for3x3(obraz_wejsciowy, x, y, 0, c, N, uchar)
		// zapisanie wartosci minimalnej pikseli z maski do obraz_wyjsciowy
		obraz_wyjsciowy(x, y, 0, c) = N.sort(true).at(0);
	}
	else
		if(filtr == 2)
		{
			cimg_forC(obraz_wejsciowy, c)
			cimg_for3x3(obraz_wejsciowy, x, y, 0, c, N, uchar)
			// zapisanie wartosci srodkowej pikseli z maski do obraz_wyjsciowy
			obraz_wyjsciowy(x, y, 0, c) = N.sort(true).at(4);
		}
		else
			if(filtr == 3)
			{
				cimg_forC(obraz_wejsciowy, c)
				cimg_for3x3(obraz_wejsciowy, x, y, 0, c, N, uchar)
				// zapisanie wartosci maksymalnej pikseli z maski do obraz_wyjsciowy
				obraz_wyjsciowy(x, y, 0, c) = N.sort(false).at(0);
			}
			else
			{
				cout << "\n\tBLEDNY WYBOR\n";
			}

	CImgDisplay dsp1(obraz_wejsciowy, "Przed"), dsp2(obraz_wyjsciowy, "Po");

	while(!dsp1.is_closed() || !dsp2.is_closed())
	{
	}

	return 0;
}
0

Bylabym wdzieczna za przyklad z jednym filtrem, ja analogicznie wykorzystalabym to do pozostalych. Pozdrawiam!

0

Obawiam się, że dopóki nie dopowiesz szczegolow (czyli przynajmniej minimum - skąd wziąć ów "cimg.h"), to czytelnicy forum mają niewielkie szanse na udzielenie Tobie pomocy, no, chyba że przypadkiem sami wlasnie-tego-pliku kiedys uzywali..

Domyślam się, że jest to http://cimg.sourceforge.net/download.shtml ?

@profesor - sądzę, że on po prostu chce zobaczyć, że rozumiesz algorytm i że potrafisz go zapisać w kodzie.. Jeśli pochwaliłaś się, że od Twoich umiejetności programowania zależy stypek, to wcale mu się nie dziwię. Tym bardziej, że masz najwyraźniej problem z owymi "dwiema" pętlami, co troche trąci kpiną - chyba że u Was nie wymaga się/że dopiero zaczeliście/pierwszy rok/cośtam/itede - ale jakie Ty masz realia, to już Ty sama wiesz, nie mnie to oceniać, tylko ... jemu.

zerknij na http://cimg.sourceforge.net/reference/structcimg__library_1_1CImg.html
są tam opisane funkcje takie jak CImg::data czy atX/Y/Z - dzieki nim odczytasz wartosci pojedynczych pixeli wg. ich wspolrzednych. Teraz wystarczy zerknac na algorytm, zastanowic sie po czym on iteruje, zapisac to jako petle, w miejscach gdzie algortym bada wartosc pixela - uzyc data/at/.. z wartosciami X/Y/Z (pewnie) wynikajacymi z pętel, i ..

Proponuję żebyś wyrazila w czym masz problem dokładniej- czy jest to zrozumienie algorytmu, czy przełożenie go na konstrukcje kodu, czy składnia tych konstrukcji, czy też może nie rozumiesz sposobu użycia/efektów działania metod które są opisane w dokumentacji... Prośba o gotowca którego można potem sobie rozszerzyć metodą Copi'ego-Paste'a nie wymagającą myślenia jest kiepskim pomysłem.. ale może ktoś się trafi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1