Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162

Открыть новую тему     Написать ответ в эту тему

ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
siriusall
насколько мне не изменяет память, то разность культур зависит далеко не в последнюю очередь от локали. в статье "локализация"вроде довольно подробно рассматриваются культуры.

Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 14:02 30-01-2012
siriusall



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Все проблему решил, если кому интересно или малоли:
 
<% = FormatMediumDate(rs("date")) %>
 
<%  
Function FormatMediumDate(DateValue)
    Dim strYYYY
    Dim strMM
    Dim strDD
 
        strYYYY = CStr(DatePart("yyyy", DateValue))
 
        strMM = CStr(DatePart("m", DateValue))
        If Len(strMM) = 1 Then strMM = "0" & strMM
 
        strDD = CStr(DatePart("d", DateValue))
        If Len(strDD) = 1 Then strDD = "0" & strDD
 
        FormatMediumDate = strMM & "/" & strDD & "/" & strYYYY
 
End Function  
%>    

Всего записей: 166 | Зарегистр. 17-09-2008 | Отправлено: 14:05 30-01-2012 | Исправлено: siriusall, 12:50 31-01-2012
ua3vui

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
del

Всего записей: 3605 | Зарегистр. 16-04-2008 | Отправлено: 21:42 12-02-2012 | Исправлено: ua3vui, 21:42 12-02-2012
kolyas



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
del

Всего записей: 137 | Зарегистр. 19-03-2007 | Отправлено: 09:55 13-02-2012 | Исправлено: kolyas, 20:00 29-04-2012
LuckyStrike



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.....помогите пожалуйста!
пишу программу которая по нажатию кнопки отправляет сообщение на почту. через smtp сервер.
 
            SmtpClient  Smtp = new SmtpClient("smtp.mail.ru", 25);
            Smtp.Credentials = new NetworkCredential("maa_69@mail.ru", "пароль");
 
            MailMessage Message = new MailMessage();
            Message.From = new MailAddress("stepan_m01@mail.ru");
            Message.To.Add(new MailAddress("maa_69@mail.ru"));
            Message.Subject = "WAND";
            Message.Body = "Сообщение";
            Smtp.Send(Message);
но выскакиевает ошибка:
Неправильная последовательность команд. Ответ сервера: Administrative prohibition -- authorization required.  Users in your domain are not allowed to send email without authorization.  See http://help.mail.ru/mail-help/mailer/popsmtp for details.
 
Добавлено:
хотя нет, исправлюсь.....ошибка вот такая
"Синтаксическая ошибка в аргументах или параметрах. Ответ сервера: sender address must match authenticated user"

Всего записей: 78 | Зарегистр. 10-12-2008 | Отправлено: 14:20 18-02-2012
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LuckyStrike
По-моему, перепутаны адреса From и To. Или Credentials. Свойство Credentials должно содержать данные отправителя, в приведённом коде - данные получателя.

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 12:27 19-02-2012 | Исправлено: Mextrom, 12:48 19-02-2012
LuckyStrike



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да спасибо) все так и есть)

Всего записей: 78 | Зарегистр. 10-12-2008 | Отправлено: 14:46 20-02-2012
LuckyStrike



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Еще раз здравствуйте уважаемые программеры! Пишу программу для сравнения 2х картинок PSNR, вот прилагающий код:

Код:
 
public static double MSE(Bitmap bmp1, Bitmap bmp2)
        {
            double mse = 0;
            Color bmpcolor1 = new Color();
            Color bmpcolor2 = new Color();
            for (int i = 0; i < bmp1.Width; i++)
            {
                for (int j = 0; j < bmp1.Height; j++)
                {
                    for (int i1 = 0; i1 < bmp1.Width; i1++)
                    {
                        for (int j1 = 0; j1 < bmp1.Height; j1++)
                        {
                            bmpcolor1 = bmp1.GetPixel(i1, j1);
                        }
                    }
                    for (int i2 = 0; i2 < bmp2.Width; i2++)
                    {
                        for (int j2 = 0; j2 < bmp2.Height; j2++)
                        {
                            bmpcolor2 = bmp2.GetPixel(i2, j2);
                        }
                    }
 
                    mse = 1 / (bmp1.Width * bmp1.Height) * Math.Pow(Math.Abs(int.Parse(bmpcolor1.ToString()) - int.Parse(bmpcolor2.ToString())), 2);
 
                }
            }
            return mse;
        }
 
        private void рассчитатьPSNRToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Bitmap bmp1 = new Bitmap(pictureBox1.Image);
            Bitmap bmp2 = new Bitmap(pictureBox2.Image);
            int depth1 = Image.GetPixelFormatSize(bmp1.PixelFormat);
            int depth2 = Image.GetPixelFormatSize(bmp2.PixelFormat);
            double MAX = Math.Pow(2,depth1)-1;
            double PSNR = 20 * Math.Log10(MAX / Math.Sqrt(MSE(bmp1, bmp2)));
            label4.Text = PSNR.ToString();
        }
 

понимаю, что ошибка в рассчете среднеквадратичного значения, но как исправить хз, помогите кто может) заранее спасибо!
 
Добавлено:
вот сами формулы      http://ru.wikipedia.org/wiki/Пиковое_отношение_сигнала_к_шуму

Всего записей: 78 | Зарегистр. 10-12-2008 | Отправлено: 13:45 21-02-2012
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LuckyStrike
Метод расчёта MSE я бы написал так:
Код:
static double CalcMSE(Bitmap bmp1, Bitmap bmp2)
        {
            double mse = 0.0;
            for (int i = 0; i < bmp1.Width; i++)
            {
                for (int j = 0; j < bmp1.Height; j++)
                {
                    mse += Math.Pow(Math.Abs(int.Parse(bmp1.GetPixel(i, j).ToArgb().ToString()) - int.Parse(bmp2.GetPixel(i, j).ToString())), 2);  
                }
            }
            mse *= 1.0 / (bmp1.Width * bmp1.Height);
            return mse;
        }
Только есть несколько моментов:
1. Изображения должны быть одного размера (из статьи)
2. Изображения должны быть монохромными, т.е. для цветных изображений формула вообще не подойдёт т.к.
Цитата:
Для цветных изображений с тремя компонентами RGB на пиксель применяется такое же определение PSNR, но MSE считается по всем трем компонентам (и делится на утроенный размер изображения)

3. Ну и вместо int.Parse(bmp1.GetPixel(i, j).ToString()) лучше пожайлуй будет bmp1.GetPixel(i, j).ToArgb().

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 10:57 22-02-2012
LuckyStrike



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
То есть, простым языком при подсчете MSE для цыетных получаеться, я так понимаю?
mse *= 1.0 / ((bmp1.Width * bmp1.Height)*3);  
 
 
Добавлено:
или плюс еще в цикле складывать mse по трем цветам оттдельно??
 
Добавлено:
Mextrom
вот посмотри если можешь, ошибка перестала выскакивать, но в подсчете PSNR пишет бесконечность

Код:
 
public static double MSE(Bitmap bmp1, Bitmap bmp2)
        {
            double mse = 0;
            double mseR = 0;
            double mseG = 0;
            double mseB = 0;
            for (int i = 0; i < bmp1.Width; i++)
            {
                for (int j = 0; j < bmp1.Height; j++)
                {
                    mseR += Math.Pow(Math.Abs(bmp1.GetPixel(i, j).R - bmp2.GetPixel(i, j).R), 2);
                    mseG += Math.Pow(Math.Abs(bmp1.GetPixel(i, j).G - bmp2.GetPixel(i, j).G), 2);
                    mseB += Math.Pow(Math.Abs(bmp1.GetPixel(i, j).B - bmp2.GetPixel(i, j).B), 2);
                    mse += mseR + mseG + mseB;
                }
            }
            mse *= 1 / ((bmp1.Width * bmp1.Height)*3);
            return mse;
        }
 

Всего записей: 78 | Зарегистр. 10-12-2008 | Отправлено: 12:42 22-02-2012
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LuckyStrike
Я пробовал делать так
Код:
using System;
using System.Drawing;
 
namespace PSNR
{
    class Program
    {
        static void Main(string[] args)
        {
            string path1 = "d:/downloads/PSNR-example-base.png";
            string path2 = "d:/downloads/PSNR-example-comp-30.jpg";
            string path3 = "d:/downloads/PSNR-example-comp-90.jpg";
 
            Bitmap bmp1 = (Bitmap)Bitmap.FromFile(path1);
            Bitmap bmp2 = (Bitmap)Bitmap.FromFile(path2);
            Bitmap bmp3 = (Bitmap)Bitmap.FromFile(path3);
 
            Console.WriteLine(CalcPSNR(bmp1, bmp1)); // должна получиться бесконечность
            Console.WriteLine(CalcPSNR(bmp1, bmp2));
            Console.WriteLine(CalcPSNR(bmp1, bmp3));
        }
 
        private static double CalcMSE(Bitmap bmp1, Bitmap bmp2)
        {
            double mse = 0;
            double mseR = 0;
            double mseG = 0;
            double mseB = 0;
            for (int i = 0; i < bmp1.Width; i++)
            {
                for (int j = 0; j < bmp1.Height; j++)
                {
                    mseR += Math.Pow(bmp1.GetPixel(i, j).R - bmp2.GetPixel(i, j).R, 2);
                    mseG += Math.Pow(bmp1.GetPixel(i, j).G - bmp2.GetPixel(i, j).G, 2);
                    mseB += Math.Pow(bmp1.GetPixel(i, j).B - bmp2.GetPixel(i, j).B, 2);
                }
            }
            mse = (mseR + mseG + mseB) / ((bmp1.Width * bmp1.Height) * 3);
            return mse;
        }
 
        private static double CalcPSNR(Bitmap bmp1, Bitmap bmp2)
        {
            double max = Bitmap.GetPixelFormatSize(bmp1.PixelFormat);
            double psnr = 20.0 * Math.Log10(max / Math.Sqrt(CalcMSE(bmp1, bmp2)));
            return psnr;
        }  
    }
}
 
 
Картинки брал всё из той же статьи (английский вариант). Но у меня есть сомнения насчёт правильности алгоритма, т.к. результаты не совпали с числами в статье. Плюс к этому, я не знаю, каким брать max при различной глубине цвета изображений (при сравнении png (исходное изображение) и jpg (сжатое изображение), например).

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 16:49 22-02-2012
LuckyStrike



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну max вроде как бы надо брать по первой картинке 2^b-1, b - глубина картинки, вроде так
 
Добавлено:
и смотри, ты получаеться по модулю не берешь разность, там по можулю надо
 
Добавлено:
я короче их исходной картинки конвертирую в yuv и потом их сравниваю, и бесконечность все равно появляется. хз че делать(

Всего записей: 78 | Зарегистр. 10-12-2008 | Отправлено: 22:19 22-02-2012
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LuckyStrike

Цитата:
ну max вроде как бы надо брать по первой картинке 2^b-1, b - глубина картинки, вроде так  

Как я понял, предполагается, что глубина у картинок одинаковая. У меня - разная. Хотя если у png просто не учитывать альфа-канал, то одинаковая.

Цитата:
и смотри, ты получаеться по модулю не берешь разность, там по можулю надо  

Разность всё равно возводится в квадрат, так что не понятно, зачем там вообще модуль. Либо я что-то не так понял в формуле. Матан уже благополучно забыл...

Цитата:
я короче их исходной картинки конвертирую в yuv и потом их сравниваю, и бесконечность все равно появляется. хз че делать(

Бесконечность получается, когда сравниваются одинаковые картинки, т.к. среднеквадратичное отклонение равно нулю. У меня бесконечность вылезла, когда я сравнивал исходную картинку саму с собой. В двух других случая у меня получилось примерно 15 и 20 дБ (вместо 36 и 45). Перепроверь, что с чем сравниваешь.

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 01:50 23-02-2012
LuckyStrike



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Бесконечность получается, когда сравниваются одинаковые картинки, т.к. среднеквадратичное отклонение равно нулю. У меня бесконечность вылезла, когда я сравнивал исходную картинку саму с собой. В двух других случая у меня получилось примерно 15 и 20 дБ (вместо 36 и 45). Перепроверь, что с чем сравниваешь.

вот я сравниваю исходную, и конвертированую, вот код конвертора из RGB в YUV
[code]
 private void RGB_to_YUVToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Bitmap bmp = new Bitmap(pictureBox1.Image);
            for (int i = 0; i < bmp.Width; i++)
            {
                for (int j = 0; j < bmp.Height; j++)
                {
                    Color bmpColor = bmp.GetPixel(i, j);
                     y = clip((int)(0.299 * bmpColor.R + 0.587 * bmpColor.G + 0.144 * bmpColor.B));
                     u = clip((int)(-0.14713 * bmpColor.R - 0.28886 * bmpColor.G + 0.436 * bmpColor.B));
                     v = clip((int)(0.615 * bmpColor.R - 0.51499 * bmpColor.G - 0.10001 * bmpColor.B));
                    bmp.SetPixel(i, j, Color.FromArgb(y, u, v));
                }
            }
            pictureBox2.Image = bmp;
            pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
        }
[\code]
по идеи значения пикселей разные, и должна же быть разница PSNR, а выходит бесконечность

Всего записей: 78 | Зарегистр. 10-12-2008 | Отправлено: 09:40 23-02-2012
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LuckyStrike
В твоём методе я строку Bitmap bmp = new Bitmap(pictureBox1.Image);  заменил на Bitmap bmp = new Bitmap(pictureBox1.Image.Width, pictureBox1.Image.Height);, остальное всё то же самое.
Результаты для тех же картинок: бесконечность для сравнения исходной с самой собой, 21 и 27 соответственно для сравнения исходной с двумя другими.
Только сам метод конвертации странный. Ты получаешь yuv компоненты, а потом используешь их как rgb. Смотрел, что за изображение в итоге получается? У меня картинка становится красной.

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 14:28 23-02-2012
LuckyStrike



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну да, так и есть вроде бы...у меня тоже красная она становиться, правда не всегда, бывает и фиолетовая
вот ссылка про YUV http://ru.wikipedia.org/wiki/YUV
 
Добавлено:
и картинки я беру обычные из винды которые, из папки мои изображения......может просто разрешение для них большое, поэтому пснр считает бесконечность??

Всего записей: 78 | Зарегистр. 10-12-2008 | Отправлено: 15:27 23-02-2012
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LuckyStrike
Посмотри, чему у тебя равно mse. Если 0, то ты сравниваешь одинаковые изображения, т.к. иначе сумма (I(i, j) - K(i, j))^2 не может быть нулевой. Если изображения отличаются хотя бы одним пикселем, то mse будет > 0.

Цитата:
картинки я беру обычные из винды которые, из папки мои изображения

... и сравниваешь с чем?

Цитата:
PSNR наиболее часто используется для измерения уровня искажений при сжатии изображений. Проще всего его определить через среднеквадратичную ошибку (СКО или MSE (англ. mean square error)), которое для двух монохромных изображений I и K размера m&#215;n, одно из которых считается зашумленным приближением другого
Т.е. надо взять какую-нибудь bmp-шку, сжать её каким-нибуь jpeg-ом и сравнить исходное изображение со сжатым.

Цитата:
может просто разрешение для них большое, поэтому пснр считает бесконечность??

Я сравнивал изображения размерами 2028x1521 (примеры из статьи: исходное, сжатое1 и сжатое2) и 2048x3072 (сравнил два произвольных изображения одинакового размера между собой). Бесконечности не было.
 
 
Добавлено:
Кстати, для верности приведи числитель и знаменатель в выражении
Код:
mse *= 1 / ((bmp1.Width * bmp1.Height)*3);  
к double. Т.е.
Код:
mse *= (double) 1 / (double)((bmp1.Width * bmp1.Height)*3);  
или напиши 1.0 вместо 1
Код:
mse *= 1.0 / ((bmp1.Width * bmp1.Height)*3);
Вполне возможно, что у тебя именно здесь получается 0, т.к. в c# при делении целого числа на целое получится тоже целое число. Например, 1 / 2 = 0 (не 0.5!), а 1.0 / 2 = 0.5.

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 18:34 23-02-2012 | Исправлено: Mextrom, 18:48 23-02-2012
LuckyStrike



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Все, получилось у меня расчитать PSNR, просто я умножал            
Код:
mse* = (double)(mseR + mseG + mseB) / (double)((bmp1.Width * bmp1.Height)*3);
, а получаеться же не надо, сумму то в числитель записал

Всего записей: 78 | Зарегистр. 10-12-2008 | Отправлено: 00:01 24-02-2012
LuckyStrike



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mextrom, спасибо тебе за помощь!) и еще один вопрос, у тебя алгоритма сжатия нет jpg? или кусочек кода?)

Всего записей: 78 | Зарегистр. 10-12-2008 | Отправлено: 07:59 24-02-2012
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LuckyStrike
Не за что.
Алгоритма сжатия у меня нет .

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 09:37 24-02-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru