Pages: [1]   Go Down
Print
Author Topic: Ricomporre un'immagine suddivisa precedentemente  (Read 2434 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
TheSpecialOne
Apprendista Forumista
**
Offline Offline

Posts: 232



« on: 12-02-2010, 17:20:19 »

Salve a tutti, oggi, cercando di risolvere un (apparentemente) banale esercizio, ho riscontrato un bel problema!
L'esercizio in questione chiedeva di suddividere l'immagine in 4 quadranti, e applicare rispettivamente:
1°: Negativo
2°: Schiarimento
3°: Scurimento
4°: Equalizzazione
Naturalmente supposta l'immagine a toni di grigio

L'idea è stata di creare 4 sottomatrici e ad esse applicare le operazioni richieste.
Una volta eseguite le operazioni sulle sottomatrici, cerco di ricostruire l'immagine intera, ma non ci riesco!


Per farvi capire meglio il problema, posto il mio codice:

Code:
% LUT's (Negativo, schiarimento, incupimento, equalizzazione)

A=double(rgb2gray(imread('lena.jpg')));
figure,imshow(A,[]),title 'Originale';

[M,N]=size(A);
NEW=zeros(size(A));
gammaC=0.2;
gammaS=3.0;
M2=floor(M/2);
N2=floor(N/2);

% Separo i 4 quadranti e li processo separatamente
[X,Y]=size(B);
B=A(1:M2,1:N2);
C=A(1:M2,N2:N);
D=A(M2:M,1:N2);
E=A(M2:M,N2:N);
C=double(C);
D=double(D);
E=uint8(E);

for i=1:X
    for j=1:Y
        BB(i,j)=255-B(i,j);
        CC(i,j)=C(i,j).^gammaC;
        DD(i,j)=D(i,j).^gammaS;
    end
end
EE=histeq(E);
figure,imshow(BB,[]),title 'Negativo';
figure,imshow(CC,[]),title 'Schiarimento';
figure,imshow(DD,[]),title 'Scurimento';
figure,imshow(EE,[]),title 'Equalizzazione';

%Ricostruisco il primo quadrante
for i=1:M2
    for j=1:N2
        NEW(i,j)=BB(i,j);
    end
end

%Ricostruisco il secondo quadrante
ii=0;
jj=0;
for i=1:M2
    ii=ii+1;
    for j=N2+1:N
        jj=jj+1;
        NEW(i,j)=NEW(i,j)+CC(ii,jj);
    end
    jj=0;
end


figure,imshow(NEW,[]);

Per semplicità ho omesso la ricostruzione degli altri 2 quadranti.
L'immagine è stata caricata nella matrice A.
Dopodichè ho creato 4 sottomatrici B,C,D,E e le ho processate dentro un ciclo for, restituendo in BB,CC,DD,EE i risultati voluti.
Ho creato la matrice NEW, formata da zeri, e delle dimensioni di A.
Ho cercato poi di 'riunire' le 4 matrici, ma mi riesce correttamente solo con il primo quadrante, quello del negativo.

Spero qualcuno possa darmi una mano
« Last Edit: 12-02-2010, 17:23:22 by TheSpecialOne » Logged
Vitocr
Matricola
*
Offline Offline

Posts: 84



« Reply #1 on: 12-02-2010, 17:31:20 »

secondo me per ricostruire i quadranti potresti utilizzare questa istruzione:

Code:
NEW(1:m,1:n)= [BB CC; DD EE];



spero sia giusto!!!!
Logged
TheSpecialOne
Apprendista Forumista
**
Offline Offline

Posts: 232



« Reply #2 on: 12-02-2010, 17:47:33 »

Appena provato, non và  testate testate
Logged
TheSpecialOne
Apprendista Forumista
**
Offline Offline

Posts: 232



« Reply #3 on: 12-02-2010, 18:24:45 »

secondo me per ricostruire i quadranti potresti utilizzare questa istruzione:

Code:
NEW(1:m,1:n)= [BB CC; DD EE];



spero sia giusto!!!!

Ho risolto! L'operazione era simile a quella che mi hai consigliato, cioè;
Code:
NEW=[BB CC;DD EE];

Ora ,però, mi ritrovo problemi con il casting e il riscalaggio delle immagini dei quadranti due e tre (quelle processate in double per intenderci)
Logged
TheSpecialOne
Apprendista Forumista
**
Offline Offline

Posts: 232



« Reply #4 on: 12-02-2010, 18:36:45 »

Tutto risolto  yoh
Se a qualcuno interessa, posso postare il codice.
Logged
Vitocr
Matricola
*
Offline Offline

Posts: 84



« Reply #5 on: 12-02-2010, 21:21:11 »

quando si posta del codice nn si sbaglia mai!!!!!!!!
 
Logged
TheSpecialOne
Apprendista Forumista
**
Offline Offline

Posts: 232



« Reply #6 on: 12-02-2010, 23:02:16 »

eccolo, con un ringraziamento per la brillante idea fornita  ok
Code:
% LUT's (Negativo, schiarimento, incupimento, equalizzazione)

A=double(rgb2gray(imread('lena.jpg')));
figure,imshow(A,[]),title 'Originale';


[M,N]=size(A);
NEW=double(zeros(size(A)));
gammaC=0.2;
gammaS=3.0;
M2=floor(M/2);
N2=floor(N/2);


% Separo i 4 quadranti e li processo separatamente
B=A(1:M2,1:N2);
C=A(1:M2,N2:N);
D=A(M2:M,1:N2);
E=A(M2:M,N2:N);
[X,Y]=size(B);
C=double(C);
D=double(D);
E=uint8(E);
CC=double(zeros(size(C)));
DD=double(zeros(size(D)));

for i=1:X
    for j=1:Y
        BB(i,j)=255-B(i,j);
        CC(i,j)=C(i,j).^gammaC;
        DD(i,j)=D(i,j).^gammaS;
    end
end
EE=histeq(E);


% Normalizzo CC & DD
temp=CC;
temp=temp-min(min(CC));
temp=temp*256/(max(max(temp)));
CC=temp;

temp=DD;
temp=temp-min(min(DD));
temp=temp*256/(max(max(temp)));
DD=temp;


% Concateno le sottomatrici BB CC DD EE in NEW
NEW=[BB CC; DD EE];
figure,imshow(NEW,[]),title 'Modificata';
Logged
Vitocr
Matricola
*
Offline Offline

Posts: 84



« Reply #7 on: 13-02-2010, 17:00:38 »

solo per curiosità.....ma l'istruzione che t avevo suggerito non funziona perkè nel tuo codice c'è un errore e precisamente è:


Code:
% Separo i 4 quadranti e li processo separatamente
B=A(1:M2,1:N2);
C=A(1:M2,N2:N);
D=A(M2:M,1:N2);
E=A(M2:M,N2:N);

devi aggiungere +1 a

N2:N
M2:M
M2:N
N2:N

quindi il codice esatto è:

Code:
% Separo i 4 quadranti e li processo separatamente
B=A(1:M2,1:N2);
C=A(1:M2,N2+1:N);
D=A(M2+1:M,1:N2);
E=A(M2+1:M,N2+1:N);

e alla fine potrai fare

Code:
NEW(1:M,1:N)=[BB CC; DD EE];

 


Logged
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #8 on: 14-02-2010, 12:47:22 »

io ho fatto lo stesso esercizio non separando le 4 immagini ma utilizzando gli indici..e le funzioni predefinite di matlab anche se a queste si possono sostituire i "procedimenti manuali"
Code:
%supponiamo il primo quadrante quello in alto a sinistra e gli altri
% a seguire in senso orario
clear all
close all
I=rgb2gray(imread('lena.jpg'));
[m,n]=size(I);
A=zeros(m,n);
%primo
A(1:round(m/2),1:round(n/2))=imadjust(I(1:round(m/2),1:round(n/2)),[0 1],[1 0]);
%secondo
A(1:round(m/2),(round(n/2)+1):n)=imadjust(I(1:round(m/2),(round(n/2)+1):n),[0 1],[0 1],0.2);
% terzo
A((round(m/2)+1):m,(round(n/2)+1):n)=imadjust(I((round(m/2)+1):m,(round(n/2)+1):n),[0 1],[0 1],2);
% quarto
A((round(m/2)+1):m,1:round(n/2))=histeq(I((round(m/2)+1):m,1:round(n/2)));

figure, subplot(121),imshow(I,[]),title('originale');
subplot(122),imshow(A,[]),title('processata');
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
TheSpecialOne
Apprendista Forumista
**
Offline Offline

Posts: 232



« Reply #9 on: 14-02-2010, 13:30:56 »

io ho fatto lo stesso esercizio non separando le 4 immagini ma utilizzando gli indici..e le funzioni predefinite di matlab anche se a queste si possono sostituire i "procedimenti manuali"
Code:
%supponiamo il primo quadrante quello in alto a sinistra e gli altri
% a seguire in senso orario
clear all
close all
I=rgb2gray(imread('lena.jpg'));
[m,n]=size(I);
A=zeros(m,n);
%primo
A(1:round(m/2),1:round(n/2))=imadjust(I(1:round(m/2),1:round(n/2)),[0 1],[1 0]);
%secondo
A(1:round(m/2),(round(n/2)+1):n)=imadjust(I(1:round(m/2),(round(n/2)+1):n),[0 1],[0 1],0.2);
% terzo
A((round(m/2)+1):m,(round(n/2)+1):n)=imadjust(I((round(m/2)+1):m,(round(n/2)+1):n),[0 1],[0 1],2);
% quarto
A((round(m/2)+1):m,1:round(n/2))=histeq(I((round(m/2)+1):m,1:round(n/2)));

figure, subplot(121),imshow(I,[]),title('originale');
subplot(122),imshow(A,[]),title('processata');
anche questa è stata una buona idea!
io ho rispolverato certi comandi poco utilizzati, con la scusa dell'esercizio!
Logged
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #10 on: 14-02-2010, 13:33:00 »

speriamo di averle domani le buone idee  [Emoticon] Asd
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
Antoniods
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 475



« Reply #11 on: 14-02-2010, 16:33:17 »

speriamo di averle domani le buone idee  [Emoticon] Asd
Logged

"Ho fallito diversi esami all'università, un mio amico li ha sempre passati tutti al primo colpo. Ora lui è ingegnere alla Microsoft, ed io... io sono il capo della Microsoft". (Bill Gates)
TheSpecialOne
Apprendista Forumista
**
Offline Offline

Posts: 232



« Reply #12 on: 14-02-2010, 17:06:12 »

speriamo di averle domani le buone idee  [Emoticon] Asd
stavo per dirlo io!
Logged
Pages: [1]   Go Up
Print
Jump to: