-
3 ضمیمه
مشکل در پیاده سازی فرمول پردازش تصویر
سلام
من در پیاده سازی این 3 فرمول که مربوط می شه به بحث histogram equalization و تصاویرش در این پست ضمیمه شده به مشکل بر خوردم
البته فرمول 1و2 رو پیاده سازی کردم به این صورت.
hnorm=imhist(f)./numel(f);
cdf=cumsum(hnorm);
ولی تو فرمول 3 نمی دونم چه طور باید T,Tmin رو محاسبه کنم و نگاشت رو انجام یدم.
دوستان عزیز اگر راهنمایی بفرمایید ممنون می شم.:خجالت:
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
عکسا خیلی ریزن. اصلا واضح نیست.
-
3 ضمیمه
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
نقل قول:
نوشته شده توسط
ehsan_faal
عکسا خیلی ریزن. اصلا واضح نیست.
عذر خواهی می کنم اشتباه شده بود. عکسها رو ضمیمه کردم:اشتباه:
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
نقل قول:
نوشته شده توسط
nina222
سلام
من در پیاده سازی این 3 فرمول که مربوط می شه به بحث histogram equalization و تصاویرش در این پست ضمیمه شده به مشکل بر خوردم
البته فرمول 1و2 رو پیاده سازی کردم به این صورت.
hnorm=imhist(f)./numel(f);
cdf=cumsum(hnorm);
ولی تو فرمول 3 نمی دونم چه طور باید T,Tmin رو محاسبه کنم و نگاشت رو انجام یدم.
دوستان عزیز اگر راهنمایی بفرمایید ممنون می شم.:خجالت:
این فرمول برای بهبود تصاویریه که شدت نور نامناسبی دارند.
ایده این فرمول توزیع کردن رنگهای یک عکس در بازه 0 - 255 است.
اگر به هیستوگرام تصاویر سیاه سفید با شدت نور زیاد و یا کم نگاه کنید میبیتید که تجمع رنگهای روشن یا تیره در یک یازه
بسیار زیاده و بازه مقادیر خیلی کوچکتر از 255 است یعتی مثلا کل رنگهای تصویر در بازه 100 تا 255 (برای یک تصویر روشن نامناسب)
قرار دارند. حال ما اگر این ستون های رنگ رو در کل بازه توزیع کنیم به طوری که بازه جدبد 0 تا 255 بشود عمل بهبود کیفیت انجام میشود.
به این ترتیب که برای تصاویر سیاه و سفید (gray scale) یک آرایه 255 تایی درست میکنید بعد تک تک پیکسل های عکس ورودی رو میخونید
و خونه متناظرش در آرایه رو یک واحد افزایش میدهید مثلا اگر مقدار پیکسل فعلی 100 بود به خانه 100 ام آرایه یک واحد اضافه میکنید.
T[Image[x,y]=T[Image[x,y]+1;
طبیعا x و y دو حلقه هستند که تصویر رو پیمایش میکنند.
به این ترتیب جدول توزیع تجمعی بدست میاد که در اون تعداد تکرار هر رنگ تو تصویر در یکی از عنصرهای آرایه ذخیره شده.
حال باید محل جدید یک مقدار را بگونه ای پیدا کنیم که توزیع ما در بازه 0 - 255 قرار گیرد. برای انجام این کار از فرمول موجود استفاده میکنیم.
Tmin حداقل مقداریه که در آرایه T وجود داره برای پیدا کردن این مقدار باید یک حلقه بنویسید از صفر شروع بشه. به اولین خانه غیر صفر در T که
رسید شماره آن خانه میشود حداقل مقداری که در بین رنگ های عکس مورد نظر داریم.
در انتها میگوییم رنگ خانه x و y میشود تعداد تکرار آن رنگ منهای Tmin تقسیم بر 1 منهای Tmin کل عبارت ضربدر 254 و حاصل بعلاه 0.5 و طبق قرمول
با تبدیل به int اعشار عدد رو حذف میکتیم.
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
سلام
این مربوط به سه تا فرمول
فقط یک بخش باقی مونده که اون هم جایگزینی مقادیر تصویر با هیستوگرام تعدیل شده هست
img = imread('G.tif');
img = double(img);
L= 255
x= 0:L;
h = hist(img (:), x);
iTmin = find(h > 0 , 1);
hnorm=h ./ numel(img);
Tmin = hnorm(iTmin);
CDF=cumsum(hnorm);
TCDF = uint8((CDF - Tmin) .* (L - 1) ./ (1 - Tmin) + 0.5);
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
نقل قول:
نوشته شده توسط
rahnema1
سلام
این مربوط به سه تا فرمول
فقط یک بخش باقی مونده که اون هم جایگزینی مقادیر تصویر با هیستوگرام تعدیل شده هست
img = imread('G.tif');
img = double(img);
L= 255
x= 0:L;
h = hist(img (:), x);
iTmin = find(h > 0 , 1);
hnorm=h ./ numel(img);
Tmin = hnorm(iTmin);
CDF=cumsum(hnorm);
TCDF = uint8((CDF - Tmin) .* (L - 1) ./ (1 - Tmin) + 0.5);
سلام مهندس
متشکرم. به نظر شما این قسمت
iTmin = find(h > 0 , 1);
نباید بشه؟
iTmin = find(h < 0 , 1);
ببخشید اگه سئوالم خیلی ابتدایی هست.
و این که خط 8 رو متوجه نشدم.
مرسی
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
نقل قول:
نوشته شده توسط
nina222
سلام مهندس
متشکرم. به نظر شما این قسمت
iTmin = find(h > 0 , 1);
نباید بشه؟
iTmin = find(h < 0 , 1);
ببخشید اگه سئوالم خیلی ابتدایی هست.
و این که خط 8 رو متوجه نشدم.
مرسی
من جای < از > استفاده کردم خطا داد مهندس فکر کنم درست فرموده بودید.
اینم کد نهاییم به نظر شما درست هست؟
img = double(img);
L= 255;
x= 0:L;
h = hist(img (:), x);
iTmin = find(h > 0 , 1);
hnorm=h ./ numel(img);
Tmin = hnorm(iTmin);
CDF=cumsum(hnorm);
TCDF = uint8((CDF - Tmin) .* (L - 1) ./ (1 - Tmin) + 0.5);
for i=1:size(img,1)
for j=1:size(img,2)
s(i,j)=TCDF(img(i,j)+1);
end
end
imshow(s);
):لبخندساده:
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
عالی بود :تشویق: مخصوصا s(i,j)=TCDF(img(i,j)+1);
البته اگه بخواهیم سریعتر بشه میتونیم حلقه را حذف کنیم و فقط به جاش اینجور بنویسیم
s = TCDF(img + 1);
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
نقل قول:
نوشته شده توسط
rahnema1
عالی بود :تشویق: مخصوصا
s(i,j)=TCDF(img(i,j)+1);
البته اگه بخواهیم سریعتر بشه میتونیم حلقه را حذف کنیم و فقط به جاش اینجور بنویسیم
s = TCDF(img + 1);
مرسی
در مورد > یا< می شه لطفا راهنمایی بفرمایید و خط 8 کدتون؟ متشکرم
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
در عکس سوم گفته smallest value
منظورش اینه که کمترین مقداری که در تصویر وجود داره را باید پیدا کنیم
یک تصویر 8 بیتی میتونه از صفر تا 255 بگیره اما ممکنه کمترین مقدار تصویر صفر نباشه مثلا 25 باشه که ما اون مقدار را میخواهیم
با استفاده از find در هیستوگرام جستجو می کنیم که محل کمترین مقدار تصویر را پیدا کنیم
مثلا فرضا کمترین مقدار برابر 25 باشه مقدار هیستوگرام برای 0 تا 24 برابر صفر هست و مثلا برای 25 برابر با تعداد پیکسلهایی که مقدارشون 25 هست
بنابراین find اندکس اولین مقداری را پیدا می کنه که مقدار هیستوگرام اون بیش از صفر باشه یعنی 25
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
نقل قول:
نوشته شده توسط
rahnema1
در عکس سوم گفته smallest value
منظورش اینه که کمترین مقداری که در تصویر وجود داره را باید پیدا کنیم
یک تصویر 8 بیتی میتونه از صفر تا 255 بگیره اما ممکنه کمترین مقدار تصویر صفر نباشه مثلا 25 باشه که ما اون مقدار را میخواهیم
با استفاده از find در هیستوگرام جستجو می کنیم که محل کمترین مقدار تصویر را پیدا کنیم
مثلا فرضا کمترین مقدار برابر 25 باشه مقدار هیستوگرام برای 0 تا 24 برابر صفر هست و مثلا برای 25 برابر با تعداد پیکسلهایی که مقدارشون 25 هست
بنابراین find اندکس اولین مقداری را پیدا می کنه که مقدار هیستوگرام اون بیش از صفر باشه یعنی 25
مرسی این قسمت رو هم محبت می کنید؟
Tmin = hnorm(iTmin);
:افسرده:
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
در اصل گفته بود: smallest value in the cumulative probability density function
که اندکس اون با محل کمترین مقدار در هیستوگرام یکی هست وقتی که اندکس یعنی iTmin بدست اومد دیگه بقیه مطالب بعهده خودتون فقط این دو تا مثل هم هستند
Tmin = hnorm(iTmin);
Tmin = CDF(iTmin);
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
نقل قول:
نوشته شده توسط
rahnema1
در اصل گفته بود: smallest value in the cumulative probability density function
که اندکس اون با محل کمترین مقدار در هیستوگرام یکی هست وقتی که اندکس یعنی iTmin بدست اومد دیگه بقیه مطالب بعهده خودتون فقط این دو تا مثل هم هستند
Tmin = hnorm(iTmin);
Tmin = CDF(iTmin);
مرسی. محبت کردید.
درست می فرمایید تو درک مطالب دیگه باید خودم تلاش کنم.البته شما کامل بنده رو راهنمایی کردید.
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
نقل قول:
نوشته شده توسط
rahnema1
در اصل گفته بود: smallest value in the cumulative probability density function
که اندکس اون با محل کمترین مقدار در هیستوگرام یکی هست وقتی که اندکس یعنی iTmin بدست اومد دیگه بقیه مطالب بعهده خودتون فقط این دو تا مثل هم هستند
Tmin = hnorm(iTmin);
Tmin = CDF(iTmin);
سلام
به نظر من اگه بخوایم ساده تر بنویسیم این هم درست هست:لبخندساده:
Tmin=min(CDF);
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
نه حداقل CDF که ممکنه برابر با صفر بشه در صورتی که حداقل تصویر ما 25 باشه
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
سلام
من می خوام واریانس و میانگین رو بصورت local برای تصویرم محاسبه کنم و به مشکل برخوردم . اما قبل از این که بخوام این کارو انجام بدم خواسته شده بود که میانگین و واریانس و یا انحراف معیار رو بصورت global محاسبه کنم.که خوشبختانه مشکلی نداشت
من کاری که انجام دادم این هست
[v]=statmoments(h1,2);
M=v(1);
variance=v(2);
D = sqrt(variance);
و خود function هم
function [v, unv] = statmoments(p,n)
%STATMOMENTS Computes statistical central moments of image histogram.
% [W,UNV] = STATMOMENTS(P, N) computes up to the Nth statistical
% central moment of a histogram whose components are in vector
% P. The length of P must equal 256 or 65536.
%
% The program outputs a vector V with V(1) = mean, V(2) = variance,
% V(3) = 3rd moment, . . . V(N) = Nth central moment. The random
% variable values are normalized to the range [0, 1], so all
% moments also are in this range.
%
% The program also outputs a vector UNV containing the same moments
% as V, but using un-normalized random variable values (e.g., 0 to
% 255 if length(P) = 2^8). For example, if length(P) = 256 and V(1)
% = 0.5, then UNV(1) would have the value UNV(1) = 127.5 (half of
% the [0 255] range).
Lp = length(p);
if (Lp ~= 256) & (Lp ~= 65536)
error('P must be a 256- or 65536-element vector.');
end
G = Lp - 1;
% Make sure the histogram has unit area, and convert it to a
% column vector.
p = p/sum(p); p = p(:);
% Form a vector of all the possible values of the
% random variable.
z = 0:G;
% Now normalize the z's to the range [0, 1].
z = z./G;
% The mean.
m = z*p;
% Center random variables about the mean.
z = z - m;
% Compute the central moments.
v = zeros(1, n);
v(1) = m;
for j = 2:n
v(j) = (z.^j)*p;
end
if nargout > 1
% Compute the uncentralized moments.
unv = zeros(1, n);
unv(1)=m.*G;
for j = 2:n
unv(j) = ((z*G).^j)*p;
end
end
global کدش به این صورت بود. برای قسمت local به مشکل برخوردم. اگه براتون امکان داره کمکم کنید. مرسی
-
1 ضمیمه
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
در واقع من این فرمول رو پیاده سازی کردم.
-
1 ضمیمه
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
و دیگه نتونستم باقیش رو که این قسمت هست انجام بدم. که این قسمت هست
-
1 ضمیمه
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
دو تا اولی گلوبال و دوتای آخری هم لوکال
I= double(I);
variance = var (I(:));
miangin = mean (I(:));
[r c] = size(I);
img = zeros(r+2,c+2);
img(2:(r + 1) ,2: (c + 1)) = I;
img = [ img(1:r, 1:c)(:), img(1:r, 2: (c + 1))(:),img(1:r, 3: (c + 2 ))(:), img(2:(r + 1),1: c)(:), img(2:(r + 1),2: (c + 1))(:), img(2:(r + 1),3: (c + 2))(:), img(3:(r + 2),1: c)(:), img(3:(r + 2),2: (c + 1))(:), img(3:(r + 2),3: (c + 2))(:)];
temp = zeros(r+2,c+2);
temp(2:(r + 1) ,2: (c + 1)) = 1;
temp = [ temp(1:r, 1:c)(:), temp(1:r, 2: (c + 1))(:),temp(1:r, 3: (c + 2 ))(:), temp(2:(r + 1),1: c)(:), temp(2:(r + 1),2: (c + 1))(:), temp(2:(r + 1),3: (c + 2))(:), temp(3:(r + 2),1: c)(:), temp(3:(r + 2),2: (c + 1))(:), temp(3:(r + 2),3: (c + 2))(:)];
sumpix = sum(temp,2);
miangin_local = sum(img, 2) ./sumpix;
variance_local = (((I(:) -sum(img, 2) ./sumpix).^2) ./ sumpix);
miangin_local = reshape(miangin_local,r,c);
variance_local = reshape(variance_local,r,c);
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
یعنی حالت local روی کل تصویرمون بصورت پنجرهای 3*3 اعمال می شه؟
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
نقل قول:
نوشته شده توسط
rahnema1
دو تا اولی گلوبال و دوتای آخری هم لوکال
I= double(I);
variance = var (I(:));
miangin = mean (I(:));
[r c] = size(I);
img = zeros(r+2,c+2);
img(2:(r + 1) ,2: (c + 1)) = I;
img = [ img(1:r, 1:c)(:), img(1:r, 2: (c + 1))(:),img(1:r, 3: (c + 2 ))(:), img(2:(r + 1),1: c)(:), img(2:(r + 1),2: (c + 1))(:), img(2:(r + 1),3: (c + 2))(:), img(3:(r + 2),1: c)(:), img(3:(r + 2),2: (c + 1))(:), img(3:(r + 2),3: (c + 2))(:)];
temp = zeros(r+2,c+2);
temp(2:(r + 1) ,2: (c + 1)) = 1;
temp = [ temp(1:r, 1:c)(:), temp(1:r, 2: (c + 1))(:),temp(1:r, 3: (c + 2 ))(:), temp(2:(r + 1),1: c)(:), temp(2:(r + 1),2: (c + 1))(:), temp(2:(r + 1),3: (c + 2))(:), temp(3:(r + 2),1: c)(:), temp(3:(r + 2),2: (c + 1))(:), temp(3:(r + 2),3: (c + 2))(:)];
sumpix = sum(temp,2);
miangin_local = sum(img, 2) ./sumpix;
variance_local = (((I(:) -sum(img, 2) ./sumpix).^2) ./ sumpix);
miangin_local = reshape(miangin_local,r,c);
variance_local = reshape(variance_local,r,c);
یه مقدار توضیح می دید برای قسمت local ؟
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
من سعی کردم از یه حلقه for برایi,j کنم که 3تا 3 تا برن جلو ولی همش خطا داد. می شه این ناحیه 3*3 رو یه مقدار برام توضیح بدید. مرسی:اشتباه:
img = zeros(r+2,c+2);
یه قسمت3*3 در نظر می گیره فقط یا واسه کل تصویر این کارو انجام میده؟
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
خطا می ده
()-indexing must appear last in an index expression.
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
من توی octave اجرا کردم
اینجور اصلاح کنید دیگه باید کار کنه
I= double(I);
variance = var (I(:));
miangin = mean (I(:));
[r c] = size(I);
img = zeros(r+2,c+2);
img(2:(r + 1) ,2: (c + 1)) = I;
temp = zeros(r+2,c+2);
temp(2:(r + 1) ,2: (c + 1)) = 1;
sumimg = img(1:r, 1:c)+ img(1:r, 2: (c + 1))+ img(1:r, 3: (c + 2 )) + img(2:(r + 1),1: c)+ img(2:(r + 1),2: (c + 1))+ img(2:(r + 1),3: (c + 2))+ img(3:(r + 2),1: c)+ img(3:(r + 2),2: (c + 1))+ img(3:(r + 2),3: (c + 2));
numpix = temp(1:r, 1:c)+ temp(1:r, 2: (c + 1))+temp(1:r, 3: (c + 2 ))+ temp(2:(r + 1),1: c)+ temp(2:(r + 1),2: (c + 1))+ temp(2:(r + 1),3: (c + 2))+ temp(3:(r + 2),1: c)+ temp(3:(r + 2),2: (c + 1))+ temp(3:(r + 2),3: (c + 2));
miangin_local = sumimg ./ numpix;
variance_local = (((I - sumimg ./ numpix).^ 2) ./ numpix);
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
برای کل تصویر عملیات انجام می گیره عملیاتی که می خواد در حلقه انجام بگیره یکجا انجام می دهیم
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
نقل قول:
نوشته شده توسط
rahnema1
برای کل تصویر عملیات انجام می گیره عملیاتی که می خواد در حلقه انجام بگیره یکجا انجام می دهیم
ممنونم:لبخندساده:
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
نقل قول:
نوشته شده توسط
rahnema1
برای کل تصویر عملیات انجام می گیره عملیاتی که می خواد در حلقه انجام بگیره یکجا انجام می دهیم
سلام
مهندس بی زحمت این کد local رو یه بار چک می کنید؟ رو تصویرم اعمال کردم نتیجه خوب نشد. مرسی:خجالت:
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
نقل قول:
نوشته شده توسط
nina222
سلام
مهندس بی زحمت این کد local رو یه بار چک می کنید؟ رو تصویرم اعمال کردم نتیجه خوب نشد. مرسی:خجالت:
مهندس خودتی!
والا چک کردم مشکل نداشت. مشکلش از چه جهته؟
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
نقل قول:
نوشته شده توسط
rahnema1
مهندس خودتی!
والا چک کردم مشکل نداشت. مشکلش از چه جهته؟
روزتون مبارک مهندس:چشمک:
ای بابا من اگه مهندس بودم که همه سئوالاتم رو از شما نمی پرسیدم. :خجالت:
راستش بعد این که واریانس و میانگین رو استفاده کردم تو پیاده سازیم به نتیجه مورد نظر نرسیدم گفتم شاید ایراد از این قسمت کدم باشه. مرسی که چک کردید.
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
قرار بود به چه نتیجه ای برسید؟
-
1 ضمیمه
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
نقل قول:
نوشته شده توسط
rahnema1
قرار بود به چه نتیجه ای برسید؟
ازش این جا استفاده کردم و خدمتتون ارسال کردم.
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
خطا داد اصلا شکل 6 رو نشون نمی ده
Operands to the || and && operators must be convertible to logical scalar values.
Error in edit2 (line 81)
if (miangin_local<= 0.5*M)&&(0.03*D<=variance_local)&&(variance_local< =0.5*D);
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
می شه لطفا با این تست بفرمایید؟
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
این جور باید باشه کاملش را فرستادم
G = zeros(r ,c);
index = ((miangin_local<= 0.5*M) & (0.03*D <=variance_local) & (variance_local<= 0.5*D));
G(index) = 3 * f(index);
G(~index)=f(~index);
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
نقل قول:
نوشته شده توسط
rahnema1
این جور باید باشه کاملش را فرستادم
G = zeros(r ,c);
index = ((miangin_local<= 0.5*M) & (0.03*D <=variance_local) & (variance_local<= 0.5*D));
G(index) = 3 * f(index);
G(~index)=f(~index);
عالی بود .:خجالت:
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
سلام
من متاسفانه هنوز مشکلم حل نشده و اون مواردی که باید برنامم تشخیص می داد رو تشخیص نمی ده. احتمالا یه جایی از کدم یه مشکلی وجود داره. البته از اون حالت بدی که داشت خیلی بهتر شد به کمک شما اما هنوز کد درستی نیست.
خیلی روش فکر کردم و چند تا نکته به ذهنم رسید که امیدوارم کمک کنید.
میانگین و انحراف معیاری که با تابع statemoments بدست می یاد خیلی فرق داره با اون میانگین و انحراف معیاری که دستور شما ((در حالت global )) بدست می یاره
مثلا برای تصویر مورد نظر من ((در حالت global ))
کد شما 64.4814 و 69.7981 رو بدست آورد و تابع statemoments مقادیر 0.2529 و0.2737 رو بدست آورد.
با توجه به فرمول 7و8و6 به نظر شما باید از کدوم استفاده کنم تابع s.....یا کد شما؟:ناراحت:
با توجه به این که این فرمول ها رو تو کتاب گنزالس دیدم و براشون این تابعی که فرستادم رو آورده بود به نظر شما منظور مقاله کدومشون هست.
-
نقل قول: مشکل در پیاده سازی فرمول پردازش تصویر
احتمالا باید مقادیر را تقسیم بر 255 کنید